Datumsprobleme ab Oktober !?!?
jc
- perl
0 Klaus Mock0 jc
0 TomIRL0 Problem gefunden!
jc
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.
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
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
Hi jc
Man beachte Sommer und Winterzeit...
:-)
TomIRL
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
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
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