Проблема с часовым поясом во время перехода на летнее время

1

Я просто прослушиваю часы дневного света

Я, кажется, 3rd November 2013 01:00:00начать время EST

Теперь время, когда я установил свое время на 3 ноября 2013 г. 00:58: хх (несколько секунд)

и беги date

это дает мне действительный часовой пояс, т.е. EDT

но

даже после истечения времени 01:00:00, и я все еще запрашиваю библиотеку дат

Я до сих пор вижу часовой пояс как EDTи нетEST

посмотрите на этот скриншот введите описание изображения здесь

Вы можете ясно видеть часовой пояс, говорящий как EDT, даже когда это EST

любой имеет ключ к этому

Обновить

Есть еще одна находка, которую я нашел, если я перезагружаю свою машину, я вижу это

введите описание изображения здесь

user1328293
источник

Ответы:

2

Поведение, которое вы описываете, соответствует ожиданиям. Смотрите этот сайт для подробного подтверждения . Вы также можете просмотреть описание здесь .

Поскольку DST заканчивается осенью, а часы движутся назад, мы называем это переходом «откат». Когда ваши часы приближаются к 2:00, вместо этого они возвращаются к 1:00. Местное время с 1:00:00 до 1: 59: 59,999 повторяется. Ко времени попадания в 2:00 уже повторяется второй случай 1:00 часа, и летнее время уже закончилось.

Мы используем метку EDT для восточного летнего времени, когда смещение происходит в UTC-04: 00, и метку EST для восточного стандартного времени, когда смещение происходит в UTC-05: 00. Так что нет, EDT и EST не одно и то же. Это делает вопрос , который один вы находитесь, особенно в 1:00 часа в день перехода.

Часы движутся так:

...
00:59:58 EDT (-0400)
00:59:59 EDT (-0400)
01:00:00 EDT (-0400)   --+
01:00:01 EDT (-0400)     |--- 1st instance of 1:00 hour
...                      |
01:59:59 EDT (-0400)   --+
01:00:00 EST (-0500)   --+  <----  transition
01:00:01 EST (-0500)     |
...                      |--- 2nd instance of 1:00 hour
01:59:59 EST (-0500)   --+
02:00:00 EST (-0500)
02:00:01 EST (-0500)
...

Также имейте в виду, что когда вы устанавливаете время в 1:00 по местному времени, вы недостаточно точны. Поскольку есть два экземпляра 1:00, ОС просто выберет один для вас. В Linux и Mac OSX базовые системные часы хранятся в UTC. 1:00 EDT в 5:00 UTC, а 1:00 EST в 6:00 UTC.

Перезагрузка вашей машины не должна иметь никакого эффекта. Я предполагаю, что вы не сразу перезапустили его, но дали время, чтобы оно снова переместилось назад.

Дополнительная информация

Взгляните на справочную страницу для dateкоманды . Мы можем установить часы по местному времени, используя несколько странный формат, [[[mm]dd]HH]MM[[cc]yy][.ss] так что это 1:00 по местному времени в день перехода:

date 110301002013

Но это не очень специфично, поэтому ОС, вероятно, выбирает EDT, потому что это первый экземпляр. Это могло бы также выбрать EST, так как мы не указали.

Вместо этого рассмотрите возможность установки его по UTC:

date -u 110305002013       (1:00 EDT)

or

date -u 110306002013       (1:00 EST)
Мэтт Джонсон-Пинт
источник
1

Я не уверен, как dateвыбрать его часовой пояс, но он может быть переопределен через TZпеременную окружения. Разница в двух снимках экрана (до / после перезагрузки) заключается в том, что dateобновлен выбранный по умолчанию часовой пояс. Все времена были всегда правильными; это только вопрос того, как основное время было напечатано в виде строки.

Не знаю, поможет ли это в корне вашей путаницы, но я нашел это полезным:

EDT и EST - это просто две разные часовые пояса, и они существуют круглый год. Обычно можно изменить часовой пояс по умолчанию только во время путешествий, но в некоторых регионах люди также меняют свой часовой пояс по умолчанию в определенные моменты. Например, в 2013.Nov.03 05:59 GMT люди на восточном побережье США имеют тенденцию печатать время в EDT; в 2013.Nov.03 06:01 GMT они внезапно будут печатать все свои даты в EST.

Если кто-то говорит «встретимся с вами в 14:30», вам нужно знать, какой часовой пояс они используют, чтобы сделать его однозначным. Ответ @ Мэтта разъясняет, как люди интерпретируют часовой пояс, когда это явно не указано.

не-только-йети
источник
Мне нравится думать о EST и EDT как о двух сегментах одной и той же зоны ET ( America/New_York). И да, некоторые места просто остаются на EST и никогда не используют EDT (например, Каймановы острова). Ваше описание в основном точное. Различия просто семантические. Не уверен, что изменение TZпеременной поможет, хотя.
Мэтт Джонсон-Пинт
0

edt и est - это одна и та же зона, за исключением edt для лета (дневное время) и est для зимы (стандартное время). Пока ваши часы показывают правильное время, это не имеет значения. Также есть не начинается до 2 утра, а не 1 утра.

jmc302005
источник
Смотрите мое обновление в прикрепленном вопросе
user1328293
но проблема возникает из-за этого каждый раз, когда я делаю Time.now (t1) является библиотекой unix даты, эквивалентной ruby, я даю мне EDT, но хранилище полей даты и времени в mysql преобразуется в правильный часовой пояс с помощью ruby, т.е. EST (t2) и, как результат, когда я пытаюсь найти разницу t1-t2, возвращается отрицательное значение
user1328293
хорошо, если это исправляется тогда, в чем проблема? как это исправить, не имеет значения, если так, верно? Я имею в виду, что если ваши часы показывают правильное время, действительно ли имеет значение, если они показывают edt, когда вы запускаете Time.now. если mysql верен, то это важно, потому что это данные. пока это или есть или есть, вы все еще находитесь в (восточном) часовом поясе. Возможно, Time.now еще не обновился до самого est, потому что на скриншоте вы были в 1:13 утра. Есть начало в 2 часа ночи.
jmc302005
Ну, проблема в том, что вот этот кусок кода Time.now - (Некоторое время из базы данных) Time.now, который эквивалентен дате unix, дает мне время EDT, а Database дает мне время EST, в результате я получаю отрицательное значение См. Прикрепленный screesnhot Технически вы не можете иметь отрицательное значение, если вы только проверяете время в каждом случае, посмотрите это и это, чтобы понять, что я имел в виду
user1328293
Хорошо, так что, похоже, MySQL прыгает пистолет так сказать. EST начинается в 2 часа ночи, а MySQL в EST на час раньше. это означает, что с MySQL есть какая-то ошибка часового пояса, а Time.now находится в другом часовом поясе. Восточный часовой пояс UTC-5: 00 Это то, что показано на вашем снимке экрана MySQL. Часовой пояс Атлантики - UTC-4: 00, и это то, что показывает ваш Time.now в соответствии с вашим снимком экрана mysql. Это означает, что вам нужно изменить свой Time.now на восточный часовой пояс UTC-5: 00.
jmc302005