2010-10-23 3 views
3
> 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 вопроса по этому поводу:Rails, utc_to_local и летнее время

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

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

В основном я занимаюсь # 2 здесь. # 1 - скорее любопытство.

Спасибо!

+0

См [здесь] (http://rubyforge.org/pipermail/tzinfo -users/2007-September/000015.html) для рассуждений Фила – Zabba

ответ

1

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)") 

Смотрите также this question Я просто спросил ...

Смежные вопросы