Соблюдает ли UTC летнее время?


83

Я пытаюсь написать сценарий, в котором я хочу преобразовать любой часовой пояс в UTCобратный. Но откуда-то я узнал, что при преобразовании любого часового пояса в UTC с учетом или без учета летнего времени он даст то же самое.UTC время. Например: если я попытаюсь преобразовать это:

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

в UTC с DST и без DST, я получу ..

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

Это corect ?? Если да, то почему ??? Пожалуйста, дайте мне свои ответы.


Если вы покажете нам сценарий, мы сможем помочь вам немного лучше.
Kevin Lacquement

4
И, отвечая на ваш вопрос заголовка, никакой UTC не соблюдает переход на летнее время; другие зоны, однако, могут.
Kevin Lacquement

Ответы:


139

Нет, в самом UTC никогда не было летнего времени. Это постоянная система отсчета, относительно которой выражаются другие часовые пояса.

Со страницы Википедии в формате UTC :

UTC не меняется при смене сезонов, но местное время или гражданское время могут измениться, если юрисдикция часового пояса соблюдает летнее или летнее время. Например, UTC на восточном побережье США зимой на 5 часов опережает местное время, а летом - на 4 часа.

Другими словами, когда часовой пояс наблюдает за летним поясом, его смещение от всемирного координированного времени изменяется при переходе на летнее время, но именно этот часовой пояс наблюдает летнее время, а не всемирное координированное время.

Не зная много об обработке часовых поясов PHP, мне кажется странным, что вы можете указать «с DST» или «без DST» в преобразовании - сами часовые пояса определяют, когда срабатывает DST ... это не должно быть то, что вы указываете сами.


1
«Не зная много об обработке часовых поясов PHP, мне кажется странным, что вы можете указать« с DST »или« без DST »в преобразовании» ... вероятно, потому, что вы не сделали много программируемых макаронных изделий с гиперссылками. Это язык со встроенной date_sunriseфункцией, которая сообщает вам, когда восходит солнце. Я не уверен, требуется ли DST для преобразования, но это первоклассный гражданин объекта даты: php.net/manual/en/function.date.php .
Paul Draper

@PaulDraper: Быть первоклассным гражданином объекта даты имеет определенный смысл - просто не указывать его отдельно для преобразования. Однако с тех пор я узнал немного больше о некоторых основных подпрограммах C, и я подозреваю, что они имеют к этому
прямое отношение

1
Думаю, можно спросить, летнее время сейчас. Без этой дополнительной информации невозможно перейти от местного времени + часового пояса к однозначному времени UTC. Это связано с тем, что в некоторых случаях местное время происходит дважды во время перехода на летнее время.
Tom

@Tom: Мне очень хорошо известно, что местное время встречается дважды, но это не значит, что было бы неплохо указать, является ли местное время переходом на летнее время в самом преобразовании. Лучше - ИМО - указать способ разрешения неоднозначности, если она неоднозначна. Я предпочитаю API, чтобы не позволять вам описывать невозможные ситуации, такие как EDT в январе.
Джон Скит,

1
Если вы не знаете, как установить часовой пояс в PHP, потому что PHP - беспорядок, вот фантастическая статья о том, почему нужно просто убрать
Lucent Fox

1

У меня такая же проблема, используя этот код:

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

Сейчас лето, и время, которое производит этот код, отстает на час, поэтому я не думаю, что время UTC в PHP подстраивается под летнее время.

Интересно посмотреть, есть ли у кого-нибудь решение ...

РЕДАКТИРОВАТЬ:

Нашел этот код на форуме, работает отлично !!

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

Таким образом, вы можете затем вызвать текущую дату и время, используя $ TIME. Вывод можно настроить так, чтобы отображать его по-другому, изменив бит внутри тега date (). Если вы хотите настроить вывод date (), используйте это руководство: http://php.net/manual/en/function.time.php

Надеюсь это поможет :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.