rails 'utc_to_local и летнее время - PullRequest
       14

rails 'utc_to_local и летнее время

3 голосов
/ 23 октября 2010
> e = Event.first
> e.registration_start_utc  #registration_start_utc is a datetime column
 => Sat, 23 Oct 2010 06:38:00 UTC +00:00 
> e.registration_start_utc.utc?
 => true 
> ActiveSupport::TimeZone.find_tzinfo("America/New_York").utc_to_local(e.registration_start_utc)
 => Sat, 23 Oct 2010 02:38:00 UTC +00:00

2 вопроса по этому поводу:

1) Почему этот последний вывод показывает «UTC» - преобразованный час (6 => 2), но он все еще говорит о UTC.Почему не EST / EDT?

2) Что происходит после перехода на летнее время и смещения для Нью-Йорка с -4 на -5?Значение в БД не меняется, поэтому мой единственный вывод заключается в том, что мое приложение начнет показывать «1:38» везде вместо правильных 2: 38?

Меня больше всего волнует # 2 здесь.# 1 больше любопытства.

Спасибо!

1 Ответ

1 голос
/ 14 марта 2011

2) utc_to_local использует дату для определения правильного смещения, поэтому выходные данные всегда будут одинаковыми для данной даты.

Вы можете проверить это следующим образом:

t = Time.utc(2011,3, 14, 12)
# => 2011-03-14 12:00:00 UTC
t2 = Time.utc(2011,3, 11, 12)
# => 2011-03-11 12:00:00 UTC
ActiveSupport::TimeZone.find_tzinfo("America/New_York").utc_to_local(t)
# => 2011-03-14 08:00:00 UTC
ActiveSupport::TimeZone.find_tzinfo("America/New_York").utc_to_local(t2)
# => 2011-03-14 07:00:00 UTC

1) Мне это тоже не кажется правильным. Я предполагаю, что они интересуются только фактическим значением часа, минут и т. Д. И игнорируют часовой пояс.

В любом случае вам лучше использовать:

e.registration_start_utc.in_time_zone("Eastern Time (US & Canada)")

См. Также этот вопрос Я только что спросил ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...