我试图隐藏UTC时间" 2018-04-02T14:30:00Z"在纯Ruby中的EST。我注意到以下差异。如果我使用Rails解析UTC时间,然后添加EST zone_offset,我会得到与使用" in_time_zone"不同的时间。帮手。 9:30对10:30。
2.2.4 :001 > t = Time.parse "2018-04-02T14:30:00Z"
=> 2018-04-02 14:30:00 UTC
2.2.4 :002 > t + Time.zone_offset("EST")
=> 2018-04-02 09:30:00 UTC
2.2.4 :003 > t.in_time_zone('Eastern Time (US & Canada)')
=> Mon, 02 Apr 2018 10:30:00 EDT -04:00
答案 0 :(得分:1)
您可以尝试使用localtime
方法,例如Time.parse("2018-04-02T14:30:00Z").localtime("-05:00").strftime("%m/%d/%Y %I:%M %p")
来打印,以便让时间对象移除strftime
答案 1 :(得分:1)
Rails确实很好地完成了时区,并且在不使用它的情况下复制ActiveSupport::TimeWithZone#in_time_zone
的结果将会很困难。
例如,正如您所指出的那样:
>> t = Time.parse "2018-04-02T14:30:00Z"
>> t.in_time_zone('Eastern Time (US & Canada)')
Mon, 02 Apr 2018 10:30:00 EDT -04:00
但请考虑您同样可以这样做:
>> t = Time.parse "2018-01-02T14:30:00Z"
>> t.in_time_zone('Eastern Time (US & Canada)')
Tue, 02 Jan 2018 09:30:00 EST -05:00
换句话说,ActiveSupport不仅可以免费处理您的时区,还可以处理您的标准/夏令时挑战。甚至不是moment.js会这样做(或者如果它会,我还没弄明白怎么样)。
您是否考虑过使用require 'active_support'
,这会在不使用所有Rails的情况下为您提供此功能?
答案 2 :(得分:0)
我相信"东部时间(美国和加拿大)"实际上是EDT而不是EST。这可以解释你的小时差异。
irb(main):014:0> t = Time.parse "2018-04-02T14:30:00Z"
=> 2018-04-02 14:30:00 UTC
irb(main):015:0> t.in_time_zone('EST')
=> Mon, 02 Apr 2018 09:30:00 EST -05:00
irb(main):016:0> t.in_time_zone('Eastern Time (US & Canada)')
=> Mon, 02 Apr 2018 10:30:00 EDT -04:00
irb(main):017:0>
另见:https://time.is/EST 和https://time.is/EDT
此外,时区是一个巨大的痛苦,并经常打破我的大脑。