如何以较短的格式获取时区
How to get timezone in a shorter format
Time.zone.name
给出 "Eastern Time (US & Canada)"
。有没有办法以更短的格式获取 Time 对象的时区,如 EST
?
Rails 使用 tzinfo gem https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
,但未提供您要查找的简码。所以没有直接的方法来获取它。尽管 Time class 确实有一个名为 zone
的方法,其中 returns 是给定时区时间的简码。
所以如果我处在你的位置,我会做这样的事情:
(Time.new.in_time_zone current_user.time_zone).zone
(Time.new.in_time_zone "Eastern Time (US & Canada)").zone
我也很好奇这个答案,所以我四处搜索并在这里找到了一个非常简洁的答案:https://makandracards.com/makandra/67330-why-you-can-t-use-timezone-codes-like-pst-or-bst-for-time-objects
它解释了 rails TimeWithZones 对象的潜在缺点,但给出了以下答案:
def human_timezone(time_string, timezone)
time = time_string.in_time_zone(timezone)
if time.zone.match?(/^\w/)
time.zone
else
time.formatted_offset
end
end
>> human_timezone('2019-03-28 16:00', 'Pacific Time (US & Canada)')
=> "PDT"
>> human_timezone('2019-03-28 16:00', 'Berlin')
=> "CET"
>> human_timezone('2019-05-01 16:00', 'Almaty')
=> "+06:00"
Time.zone.name
给出 "Eastern Time (US & Canada)"
。有没有办法以更短的格式获取 Time 对象的时区,如 EST
?
Rails 使用 tzinfo gem https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
,但未提供您要查找的简码。所以没有直接的方法来获取它。尽管 Time class 确实有一个名为 zone
的方法,其中 returns 是给定时区时间的简码。
所以如果我处在你的位置,我会做这样的事情:
(Time.new.in_time_zone current_user.time_zone).zone
(Time.new.in_time_zone "Eastern Time (US & Canada)").zone
我也很好奇这个答案,所以我四处搜索并在这里找到了一个非常简洁的答案:https://makandracards.com/makandra/67330-why-you-can-t-use-timezone-codes-like-pst-or-bst-for-time-objects
它解释了 rails TimeWithZones 对象的潜在缺点,但给出了以下答案:
def human_timezone(time_string, timezone)
time = time_string.in_time_zone(timezone)
if time.zone.match?(/^\w/)
time.zone
else
time.formatted_offset
end
end
>> human_timezone('2019-03-28 16:00', 'Pacific Time (US & Canada)')
=> "PDT"
>> human_timezone('2019-03-28 16:00', 'Berlin')
=> "CET"
>> human_timezone('2019-05-01 16:00', 'Almaty')
=> "+06:00"