Kokol: Normales Datum in Unix Format umrechnen

Hallo zusammen,

kann mir einer behilflich sein, wie ich ein normales Datum (z.B. 24.12.2008) in Unix umrechnen kann, um 7 Tage abziehen zu können (604800 Sekunden)

Vielen Dank im Voraus.

Kokol

  1. Hallo Kokol!

    use Time::Local; # (perldoc Time::Local, http://perldoc.perl.org/Time/Local.html) !

    Ti
    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Hi,

      Danke für deine Antwort.
      Leider kommt mein Provider mit Modulen nicht zurecht (?)

      Folgendes Script führt zum Fehler:
      #!/usr/bin/perl

      #use Date::Calc;
      #use Date::Calc qw(Delta_Days Add_Delta_Days Today Add_Delta_DHMS Today_and_Now);
      #$datecheck = Add_Delta_DHMS(Today_and_Now(), +7);
      #($y,$m,$d,$H,$M,$S) = Add_Delta_DHMS(02.12.2008, +7,-5,+30,0);

      ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time+($tzone*3600));
      $mon = $mon + 1;
      $hour = $hour + 1;
      if($hour < 10){ $hour = "0$hour"; }
      if($min < 10){$min = "0$min"; }
      if($sec < 10){$sec = "0$sec"; }
      if($mday < 10){$mday = "0$mday"; }
      if($mon < 10){$mon = "0$mon"; }
      $year = $year + 1900;

      Time::Local;
      $unix1 = timelocal(8,00,0,10,25,2004);
      $unix2 = timelocal(12,00,0,10,25,2004);
      #$unixB1 = gmtime($unix1);
      #$unixB2 = gmtime($unix2);

      print "Content-type: text/html\n\n";
      print qq~
      $time  <br>
      $unix1 <br>
      $unix2 <br>
      $unixB1 <br>
      $unixB2
      ~ ;

      exit();

      1. Hi,

        was genau hast Du denn an Patricks Antwort nicht verstanden, bzw, an dem von ihm genannten Modul?

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Hi,

          bei der Verwendung kam es zu einem Fehle - jetzt geht es soweit, allerdings ist da ein 70Jahre Mysterium (es wird die richtige Anzahl an Tagen angezeigt, nicht aber an Jahren:

          #!/usr/bin/perl

          use Time::Local;

          $jahr = "2008";
          $monat = "11";
          $tag = "30";

          $jahrB = "2008";
          $monatB = "12";
          $tagB = "8";

          ###########

          $monat = $monat - 1;
          $jahr = $jahr - 1900;
          $monatB = $monatB - 1;
          $jahrB = $jahrB - 1900;

          print "Content-type: text/html\n\n";

          my $seksA = timelocal(0,0,0,$tag,$monat,$jahr);
          my $seksB = timelocal(0,0,0,$tagB,$monatB,$jahrB);
          $differ = $seksB - $seksA;

          print "$seksA <br>";
          print "$seksB <br>";

          ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($differ);
          print "Tage $mday - Monate $mon - Jahre $year";

          exit();

          Was mache ich nur falsch?

          Viele Grüße

          1. #!/usr/bin/perl

            Warum benutzt du keine Warnungen und kein strict?
            Das hilft bei vielen Problemen, bei deinem aber vorerst nicht.

            $jahr = "2008";
            $monat = "11";
            $tag = "30";

            Perl kennt durchaus Zahlen, warum verwendest du hier Zeichenketten?

            print "Content-type: text/html\n\n";

            Du kannst Perl Skripte nicht in der Konsole ausführen?
            Eine Lokale Installation macht vieles einfacher, ich würd' drüber nachdenken.

            my $seksA = timelocal(0,0,0,$tag,$monat,$jahr);
            my $seksB = timelocal(0,0,0,$tagB,$monatB,$jahrB);

            Soweit ok, aber hast dir mal angeschaut in welchen Bereich die Werte liegen müssen?
            http://perldoc.perl.org/Time/Local.html

            ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($differ);
            print "Tage $mday - Monate $mon - Jahre $year";

            Ich habe in 10 Jahren Perlerfahrung diese Funktion noch nie benutzt und weiß nicht was sie macht, aber vielleicht hilft es dir bei deinem Problem, wenn du mir erklärst was gmtime macht?

            exit();

            warum das?

            Struppi.

  2. hi,

    kann mir einer behilflich sein, wie ich ein normales Datum (z.B. 24.12.2008) in Unix umrechnen kann, um 7 Tage abziehen zu können (604800 Sekunden)

    Die Rechnung über Sekunden ist etwas krückenhaft und funktioniert auch nur ab 1.1.1970.

    Daher hab ich für sowas ein Modul geschrieben, was über den julianischen Tag rechnet und somit über die gesamte Zeitrechnung des Gregorianischen und auch Julianischen Kalender funktioniert. Die Bildung von Summen und Differenzen von Datumsangaben ist reine Artihmetik und entsprechend performant, auch über Jahrtausende.

    Wenn meine Seiten, nach dem kürzlichen Providerwechsel, wieder online sind, kannst Du das Modul per Download bekommen. Ansonsten guck mal bei CPAN, Stichwort Julianday.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. kann mir einer behilflich sein, wie ich ein normales Datum (z.B. 24.12.2008) in Unix umrechnen kann, um 7 Tage abziehen zu können (604800 Sekunden)

      Die Rechnung über Sekunden ist etwas krückenhaft und funktioniert auch nur ab 1.1.1970.

      Er möchte 4 Adventssonntag für dieses Jahr berechnen, warum wollte da eine Berechnung nach 1970 nicht ausreichen?

      Daher hab ich für sowas ein Modul geschrieben, was über den julianischen Tag rechnet und somit über die gesamte Zeitrechnung des Gregorianischen und auch Julianischen Kalender funktioniert. Die Bildung von Summen und Differenzen von Datumsangaben ist reine Artihmetik und entsprechend performant, auch über Jahrtausende.

      Was hier absoluter Overkill ist.

      Struppi.

      1. hi das stimmt

        Was hier absoluter Overkill ist.

        Tagesdifferenzen über Sekunden (Time::Local) zu rechnen ist Overkill ;)

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Was hier absoluter Overkill ist.

          Tagesdifferenzen über Sekunden (Time::Local) zu rechnen ist Overkill ;)

          Mag sein, aber zuverlässiger als von Hand.

          Struppi.