Rails 5.2.3
我有个约会:
"Apr-03-2013 17:47:00"
我有一个约会区:
"America/Los_Angeles"
我正在尝试将其转换为字符串:
"Apr-03-2013 17:47:00 Pacific Daylight Time (GMT-07)"
我能想到的最好的方法是:
time_obj = ActiveSupport::TimeZone["America/Los_Angeles"].parse("2013-04-03 17:47:00")
Time.at(time_obj).strftime("%b-%d-%Y %H:%M:%S %Z")
哪个给我:
"Apr-03-2013 17:47:00 PDT"
有什么想法吗?
答案 0 :(得分:1)
我相信您需要自定义逻辑和/或您自己的时区数据库才能完全那样。
将%Z
与strftime
一起使用将为您提供操作系统喜欢的功能,ruby docs中有一些免责声明。
一个可能使您受益匪浅的想法:如果您以诸如“ America / Los_Angeles”之类的时区标识符开头,则可以使用ActiveSupport :: TimeZone :: MAPPING获得一个更友好的名称,或者至少一个Rails时区名称。
例如:
ActiveSupport::TimeZone::MAPPING.key("America/Los_Angeles")
=> "Pacific Time (US & Canada)"
但这不适用于每个标识符:
ActiveSupport::TimeZone::MAPPING.key("America/Detroit")
=> nil
您可以看到哪些会这样映射:
TZInfo::Country.get('US').zone_identifiers.map {|ident| [ident, ActiveSupport::TimeZone::MAPPING.key(ident)] }
因此,在这种情况下,您需要使用现有的标识符,否则this approach可能会起作用。
然后您需要处理夏时制部分,在这里您可以使用dst?
ActiveSupport::TimeZone["America/Los_Angeles"].parse("2013-04-03 17:47:00").dst?
然后,您需要将所有这些拼接在一起! ...并加上偏移量。