> 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。为什么不是东部时间/东部时间?
2) 夏令时切换并且纽约的偏移量从 -4 变为 -5 后会发生什么?数据库中的值不会改变,所以我唯一的结论是我的应用程序将开始在各处显示“1:38”,而不是正确的 2:38?
我最关心的是这里的#2。 #1更多的是好奇心。
Thanks!
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)")
也可以看看这个问题 https://stackoverflow.com/questions/5300493/convert-utc-to-local-time-in-rails-3我只是问...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)