首页 > 解决方案 > 如何以更短的格式获取时区

问题描述

Time.zone.name"Eastern Time (US & Canada)". 有没有办法以较短的格式获取 Time 对象的时区,例如EST

标签: ruby-on-railstimezoneactivesupport

解决方案


我也对这个答案很好奇,所以我四处搜索,在这里找到了一个非常简洁的答案: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"

推荐阅读