Thread Variable _ ? (52 answers)
Opened by bianca at 2020-12-25 10:24

haj
 2021-01-05 02:18
#193073 #193073
User since
2015-01-07
527 Artikel
BenutzerIn

user image
2021-01-04T21:15:56 bianca
2021-01-04T20:40:07 haj
Zuerst wandelst Du das stat-Ergebnis in localtime. Das sollte schon eine Sommerzeit-Korrektur anhand der auf dem System eingestellten (!) Zeitzone erledigen.
Dann addierst Du nochmal genau eine Stunde, wenn das Datum in die Sommerzeit fiel, wohl in der Annahme, das Ergebnis von stat sei in diesem Fall fehlerhaft. Warum addierst Du dann so kompliziert im "ausformulierten" Datum und nicht gleich bei $stat9?

Das ist doch nur das Testscript für hier.

Um uns zu verwirren? Du machst damit unentscheidbar, ob der vermutete Fehler in der stat-Implementierung, in der localtime-Implementierung oder in der Zeitzonen-Einstellung Deines Servers ist.

2021-01-04T21:15:56 bianca
2021-01-04T20:40:07 haj
Das Element $epoch[8] ist laut Dokumentation als "true" definiert und nicht als exakt 1. Ein sicherer Vergleich wäre if ($^O =~ /mswin/i && $epoch[8])
Es gibt auch -1 und darauf darf es genau nicht matchen.
Laut Dokumentation:
Quote
$isdst is true if the specified time occurs during Daylight Saving Time, false otherwise.
-1 ist "true" bei Perl. Wenn Du -1 von 1 unterscheiden musst, dann ist das Glücksspiel. In welcher Situation bekommst Du -1?

2021-01-04T21:15:56 bianca
2021-01-04T20:40:07 haj
Auch dann erscheint mir das $^O =~ /mswin/i recht fragil, nachdem es nicht klar ist, ob es wirklich am Betriebssystem oder an der C-Library hängt.

Bin mir 100 % sicher, dass es nur auf Win ist.
Das glaube ich Dir. Aber ich glaube nicht, dass der Fehler mit jeder C-Library auf Windows auftritt. Visual Studio 2013 verhält sich anders als Visual Studio 2015, und beides ist mswin. Zu mingw32, da ist $^O auch mswin, habe ich keine verlässlichen Daten.

2021-01-04T21:15:56 bianca
2021-01-04T20:40:07 haj
Muss es denn wirklich und unbedingt lokale Zeit sein? Die nicht eindeutig: Es gibt in der Umstellungsnacht im Herbst für zwei stat-Resultate die gleiche lokale Zeit.

Das verstehe ich nicht. Was bedeutet das?
In der Umstellungsnacht wird die lokale Zeit um eine Stunde zurückgedreht. stat liefert, wenn's korrekt implementiert ist, die Anzahl an Sekunden seit 1. Januar 1970 UTC, und läuft einfach weiter. Lokale Zeiten von 02:00 bis 03:00 gibt es in der Umstellungsnacht zweimal, die sind 3600 stat-Sekunden auseinander. Wenn Du also erst aus den stat-Resultaten lokale Zeiten ermittelst und dann hinterher anhand von $isdst "korrigierst", dann nenne ich das "von hinten durch die Brust ins Auge". Vergleiche kannst Du doch viel einfacher mit den stat-Resultaten machen!

View full thread Variable _ ?