> 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更具好奇心。

谢谢!

最佳答案

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我刚刚问过...

关于ruby-on-rails - rails的utc_to_local和夏令时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4002958/

10-12 05:16