jc: Datumsprobleme ab Oktober !?!?

Hallo,

ich sitze jetzt ca. seit 2h an einem Problem und finde einfach keine Lösung:

Ich versuche einen Countdown für den 1. Oktober zu erstellen (30. September ist nur zur Demo). Das machen ich mittels:

my $ende1 = timelocal 0, 0, 0, 30, 9, 2004;
my $ende2 = timelocal 0, 0, 0, 1, 10, 2004;
my $heute = timelocal 0, 0, 0, $mday, $mon, $year;

Die Variablen $mday etc. hole ich über "my $mday = localtime->mday();" usw.

Dann rechne ich aus:

my $diff1 = ($ende1 - $heute) / 86400;
my $diff2 = ($ende2 - $heute) / 86400;

Und nun das Problem (von heute, 29. Juni, aus gesehen):

Diff1: 93
Diff2: 95.0416666666667

Eigentlich sollte Diff2 = 94 sein, oder?
Was passiert da?
Keine Ahnung. Ausser, daß schon bei "timelocal" das Ergebnis falsch ist, nur warum weiß ich nicht :(

Falls einer weiß was ich falsch mache, bitte schnell bescheid geben...
Danke im Vorraus.

  1. Hallo,

    Falls einer weiß was ich falsch mache, bitte schnell bescheid geben...

    Du solltest die Dokumentation des Moduls (http://search.cpan.org/~drolsky/Time-Local-1.10/lib/Time/Local.pm) etwas genauer lesen, besonders den Absatz "It is worth drawing particular attention ...". BEachte insbesondere die Anmerkung zur Angabe von Monaten.

    Grüße
      Klaus

    1. Hallo Klaus,

      Du solltest die Dokumentation des Moduls (<http://search
      cpan.org/~drolsky/Time-Local-1.10/lib/Time/Local.pm>) etwas
      genauer lesen, besonders den Absatz "It is worth drawing
      particular attention ...". BEachte insbesondere die Anmerkung zur
      Angabe von Monaten.

      Hmmm ok, habe mir das jetzt durchgelesen, aber geholfen hat es glaube ich nicht.
      Falls du meinst, daß der Oktober 9 und nicht 10 ist, DAS habe ich bereits "kompensiert" "my $mon  = gmtime->mon()  + 1;".
      Bis zum 30. September stimmt die Anzahl der Tage ja auch (von heute an gesehen). Aber ab dem 1. Oktober ist es ein Tag zuviel.

      Vielleicht mache ich gerade auch einen total dummen Denkfehler?

      cu
      jc

  2. Hi jc
    Man beachte Sommer und Winterzeit...
    :-)

    TomIRL

    1. Hallo Tom,

      Man beachte Sommer und Winterzeit...

      Ok danke, klar, mit timegm sollte diese eine Stunde jetzt mit berechnet werden. Aber ich verstehe immer noch nicht, warum da ein ganzer Tag zw. 30.09 und 01.10. ist.

      cu
      jc

      1. hi,

        Ok danke, klar, mit timegm sollte diese eine Stunde jetzt mit berechnet werden. Aber ich verstehe immer noch nicht, warum da ein ganzer Tag zw. 30.09 und 01.10. ist.

        da muss kein "ganzer tag" zwischen sein.

        aber wenn du auf 30.9., 23:45 uhr 8600 sekunden (= 1 tag) drauf rechnest, und dann noch eine stunde verschiebung dazu kommt, dann ist mitternacht schnell mal überschritten ...

        gruß,
        wahsaga

        --
        [ Hier könnte Ihre Werbung stehen! ]
  3. Hallo,

    ok, es war wirklich ein Denkfehler. Kurz nach meinem letzten Post kam ich dann drauf.
    Bei timegm (bzw. timelocal) ist der Monat ja auch von 0-10, wie Klaus schon andeutete. Ich dachte, wenn ich bei gmtime (bzw. localtime) zum Monat einfach 1 hinzuaddiere, gleiche ich das damit aus.
    In wahrheit wurde aber einfach alles um 1 Monat verschoben, von Sept->Okt auf Okt->Nov. Und daher gibt es auch einen 31. sowie die Umstellung von Sommer auf Winterzeit, danke an Tom.
    Addiere ich die 1 zum Monat erst nach allen Berechnungen und nur zur Ausgabe hinzug, klappt alles wunderbar.

    Danke

    cu
    jc