Windows 7 Sommerzeit Fehler?

8

Ich versuche genau zu bestimmen, wann in einem Perl-Skript eine Sommerzeitumstellung stattfindet, indem ich die localtime -Funktion von Perl verwende und die Zeitzone mit strftime drucke.

Das Seltsame ist, dass dies für dieses Jahr und andere neuere Jahre gut zu funktionieren scheint, aber wenn ich zum Beispiel auf das Jahr 2000 zurückschaue, scheint Perl zu glauben, dass der Übergang am falschen Tag stattfindet!

>

Laut Google begann die Sommerzeit am 2. April 2000:

... aber aus irgendeinem Grund scheint der folgende Perl-Code nicht zu stimmen:

%Vor%

Ausgabe:

%Vor%

Warum denkt Perl, dass die Sommerzeit im Jahr 2000 am 12. März begonnen hat, obwohl dies eindeutig falsch ist?

BEARBEITEN:

Nach dem Lesen der Kommentare scheint es, dass dies ein Problem mit dem Betriebssystem und nicht mit Perl sein könnte. Es scheint, dass dies ein Fehler in Windows 7 sein könnte.

    
tjwrona1992 14.04.2016, 18:02
quelle

1 Antwort

2

Ich kenne die Besonderheiten der Perl-Interna nicht (noch möchte ich den Quellcode durchforsten), aber Bugs wie diese treten normalerweise unter Windows auf, wenn Sie FileTimeToLocalFileTime und LocalFileTimeToFileTime Win32-Funktionen. Diese Funktionen berücksichtigen nicht die Historie von Zeitzonen, sondern nur die aktuellen Regeln. Die Dokumentation erklärt stattdessen, was zu tun ist:

  

Um die Sommerzeit beim Konvertieren einer Dateizeit in eine lokale Zeit zu berücksichtigen, verwenden Sie die folgende Sequenz von Funktionen anstelle von FileTimeToLocalFileTime :

     
  1. FileTimeToSystemTime
  2.   
  3. SystemTimeToTzSpecificLocalTime
  4.   
  5. SystemTimeToFileTime
  6.   

Eine ähnliche Sequenz sollte für die Umkehrfunktion verwendet werden, wobei TzSpecificLocalTimeToSystemTime für den mittleren Schritt verwendet wird.

Es ist wahrscheinlich, dass die Version von Perl, die Sie gerade ausführen, diese Funktionen als Teil der Win32-Implementierung der Funktionen localtime und timelocal aufruft. Aufgrund der Kommentare in der Frage, dass einige Ihre Ergebnisse nicht reproduzieren konnten, würde ich vermuten, dass neuere Versionen von Perl wahrscheinlich wie oben beschrieben gepatcht wurden. Wenn nicht, sollten sie sein. (Ich bin mir sicher, dass jemand, der mit Perl-Interna vertrauter ist, auf den spezifischen Code und den Fehlerbericht hinweisen könnte.)

    
Matt Johnson 19.04.2016, 22:05
quelle