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

haj
 2021-01-04 01:19
#193066 #193066
User since
2015-01-07
540 articles
BenutzerIn

user image
2021-01-03T12:19:36 bianca
2021-01-02T10:53:58 haj
Der Fehler dürfte also bei Dir gar nicht auftreten und Du kannst das Modul einfach rauswerfen.

Das kann ich leider nicht bestätigen. Hier liefert Perl in stat()[9] nur Uhrzeiten, die die Sommerzeit nicht berücksichtigen, also innerhalb der Sommerzeit falsch sind.

Die Historie dazu ist laut Google wirklich gruselig: Microsoft hatte jahrelang einen Fehler bei der Behandlung der Sommerzeit bei Datei-Metadaten, und diverse Leute haben versucht, daran rumzubasteln.

Klar ist: stat($datei))[9] darf keine Sommerzeit berücksichtigen. Die Anzahl der Sekunden seit 1. Januar 1970 UTC hängt nicht davon ab, ob Sommer- oder Winterzeit ist. So etwas wie Sommerzeit kann erst bei localtime entschieden werden, wobei ich den Einsatz von localtime bei historischen Daten eh' für fragwürdig halte.

2021-01-03T12:19:36 bianca
Wenn ich CPAN:Win32::UTCFileTime aktiviere kommt richtig 19:14 raus.
Die untere Datei kommt in beiden Fällen richtig mit 12:42 raus.

Wie kriege ich denn jetzt richtige Sommerzeiten und keine Unterstrichfehlermeldung hin?

Wie beurteilst Du, was hier "falsch" und was "richtig" ist? Vielleicht nimmt der Modul auch nur eine falsche Korrektur vor, weil er "Win32" sieht, aber nicht aufs Laufzeitsystem geschaut hat?

Ich sehe hier keine triviale Lösung, das geht alles ans Eingemachte.

  • Du kannst den Server auf UTC und ohne Sommerzeit-Umstellung laufen lassen. Das ist eigentlich für Server-Systeme üblich, denn die laufen rund um die Uhr und bedienen Leute in unterschiedlichen Ländern, die an unterschiedlichen Tagen ihre Sommerzeit umstellen. Umrechnung auf eine lokale Zeit geht erst dann, wenn man weiß, in welcher Zeitzone der Anwender sitzt, und das kann bei jedem Request anders sein.
  • Du kannst das :globally bei der Verwendung des Moduls rauswerfen und stat nur gezielt in den Komponenten überschreiben, die die Zeit so genau brauchen.
  • Du kannst eine Fehlermeldung für CPAN:Win32::UTCFileTime schreiben.
  • Du kannst Perl selbst mit Visual Studio 2015 oder neuer bauen.
  • Du kannst das Betriebssystem wechseln. Wenn ich so zusammenzähle, was Dir Windows alles für Probleme eingebracht hat....


2021-01-03T12:19:36 bianca
Und wie deckt sich das, dass man CPAN:Win32::UTCFileTime eigentlich nicht mehr brauchen sollte?

Die Aussage stimmt laut Modul-Dokumentation ab Perl 5.34, das noch nicht freigegeben ist. Erst in dieser Version arbeitet Perl um den ganzen Windows-Quark herum. Dass und wie der Fehler in mingw32-Umgebung auch auftritt - oder auch nicht auftritt und das Modul nun die Sache verschlechtert - wird in der Dokumentation gar nicht behandelt. Als der Modul geschrieben wurde, gab's Strawberry Perl noch gar nicht!

View full thread Variable _ ?