Beobachtet UTC die Sommerzeit?


81

Ich versuche ein Skript zu schreiben, in das ich eine beliebige Zeitzone konvertieren UTCund umkehren möchte . Aber von einigen, bei denen ich erfahren habe, dass beim Konvertieren einer Zeitzone in UTC mit oder ohne DST-Berücksichtigung dieselbe UTCZeit gegeben ist. Zum Beispiel: Wenn ich versuche, dieses zu konvertieren:

$mytime = '2011-03-31 05:06:00.000';
$myzone = 'America/New_York';

zu UTC mit DST und ohne DST bekomme ich ..

(New_York->UTC DST=Yes)2011-03-31 09:06:00
(New_York->UTC DST=No)2011-03-31 09:06:00 ..........

Ist das richtig? Wenn ja, warum dann ??? Bitte jemand gibt mir deine Antworten.


Wenn Sie uns das Skript zeigen, können wir Ihnen etwas besser helfen.
Kevin Lacquement

4
Und als Antwort auf Ihre Titelfrage beobachtet kein UTC keine Sommerzeit. andere Zonen können jedoch.
Kevin Lacquement

Antworten:


136

Nein, UTC selbst hat niemals Sommerzeit. Es ist der konstante Bezugsrahmen, zu dem andere Zeitzonen relativ ausgedrückt werden.

Von der Wikipedia UTC-Seite :

UTC ändert sich nicht mit einem Wechsel der Jahreszeiten, aber die Ortszeit oder die Zivilzeit können sich ändern, wenn eine Zeitzonen-Gerichtsbarkeit die Sommerzeit oder die Sommerzeit einhält. Zum Beispiel ist UTC im Winter 5 Stunden vor der Ortszeit an der Ostküste der Vereinigten Staaten, im Sommer 4 Stunden vor der Ortszeit.

Mit anderen Worten, wenn eine Zeitzone die Sommerzeit beobachtet, ändert sich ihr Versatz von der UTC, wenn es einen Sommerzeitübergang gibt, aber das ist die Zeitzone, die die Sommerzeit beobachtet, nicht die UTC.

Ohne viel über die Handhabung von PHP-Zeitzonen zu wissen, erscheint es mir seltsam, dass Sie in einer Konvertierung "mit Sommerzeit" oder "ohne Sommerzeit" angeben können - die Zeitzonen selbst geben an, wann die Sommerzeit einsetzt ... sollte es nicht sein etwas, das Sie selbst angeben.


1
"Ohne viel über die Handhabung von PHP-Zeitzonen zu wissen, erscheint es mir seltsam, dass Sie in einer Konvertierung 'mit Sommerzeit' oder 'ohne Sommerzeit' angeben können" ... das liegt wahrscheinlich daran, dass Sie nicht viel programmierbare Pasta mit Hyperlinks gemacht haben. Dies ist die Sprache mit einer integrierten date_sunriseFunktion, die Ihnen sagt, wann die Sonne aufgeht. Ich bin nicht sicher, ob die Sommerzeit für die Konvertierung benötigt wird, aber es ist ein erstklassiger Bürger eines Datumsobjekts : php.net/manual/en/function.date.php .
Paul Draper

@PaulDraper: Ein erstklassiger Bürger des Datumsobjekts zu sein, macht einen gewissen Sinn - nur nicht separat für die Konvertierung anzugeben. Seitdem habe ich jedoch ein bisschen mehr über einige der zugrunde liegenden C-Routinen gelernt, und ich vermute, dass sie viel damit zu tun haben ...
Jon Skeet

1
Ich denke, es ist in Ordnung zu fragen, ob es Sommerzeit ist. Ohne diese zusätzlichen Informationen kann man nicht von einer Ortszeit + Zeitzone zu einer eindeutigen UTC-Zeit wechseln. Dies liegt daran, dass einige Ortszeiten während des Übergangs aus der Sommerzeit zweimal auftreten.
Tom

@ Tom: Ich bin mir sehr wohl bewusst, dass Ortszeiten zweimal auftreten, aber das bedeutet nicht, dass es eine gute Idee ist, in der Konvertierung selbst anzugeben, ob eine Ortszeit in der Sommerzeit ist oder nicht. Es ist besser - IMO - einen Weg anzugeben, um die Mehrdeutigkeit aufzulösen, wenn sie mehrdeutig ist. Ich bevorzuge APIs, um zu vermeiden, dass Sie unmögliche Situationen wie EDT im Januar ausdrücken können.
Jon Skeet

1
Wenn Sie sich nicht sicher sind, wie Sie die Zeitzone in PHP erstellen sollen, weil PHP ein Chaos ist, finden Sie hier eine fantastische Beschreibung, warum PHP nur in den Ruhestand versetzt werden sollte: eev.ee/blog/2012/04/09/php-a-fractal- of-bad-design
Lucent Fox

1

Ich habe das gleiche Problem mit diesem Code:

date_default_timezone_set('UTC');
$nowdate = date('l jS \of F Y h:i:s A');
echo "Current date and time is: " . $nowdate;

Es ist jetzt Sommer und die Zeit, die dieser Code erzeugt, liegt eine Stunde zurück - daher glaube ich nicht, dass sich die UTC-Zeit in PHP an die Sommerzeit anpasst.

Seien Sie interessant zu sehen, ob jemand die Lösung hat ...

BEARBEITEN:

Fand diesen Code in einem Forum, funktioniert perfekt !!

date_default_timezone_set('Europe/London');
$TIME =  date("m/d/Y H:i",time());

Sie können dann das aktuelle Datum und die aktuelle Uhrzeit mit $ TIME aufrufen. Die Ausgabe kann angepasst werden, um sie anders anzuzeigen, indem das Bit innerhalb des Datums () -Tags geändert wird. Wenn Sie die Ausgabe von date () anpassen möchten, verwenden Sie dieses Handbuch: http://php.net/manual/en/function.time.php

Hoffe das hilft :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.