33

方法如何获取当前 Time.zone 并将其转换为可供使用的格式ActiveSupport::TimeZone[some_zone].parse()

Time.zone.to_s 返回一个不能与ActiveSupport::TimeZone[zone].parse()

Time.zone.to_s返回"(GMT-08:00) Pacific Time (US & Canada)"

但是ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]nil

ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]
=> nil

ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
=> (GMT-08:00) Pacific Time (US & Canada)
4

1 回答 1

57

使用Time.zone.name,而不是Time.zone.to_s

[1] pry(main)> Time.zone.to_s
=> "(GMT-05:00) Eastern Time (US & Canada)"
[2] pry(main)> Time.zone.name
=> "Eastern Time (US & Canada)"
[3] pry(main)> ActiveSupport::TimeZone[Time.zone.name]
=> (GMT-05:00) Eastern Time (US & Canada)

至于我是如何得到这个的(根据要求),我只知道该name方法存在于Time.zone. 如果我不知道这一点,我会检查文档。如果它不像你说的那样在那里(它是,here,我通常用Pry检查类/模块/对象。Pry 是 irb 的替代品,它可以让我做类似的事情

[1] pry(main)> cd Time.zone
[2] pry(#<ActiveSupport::TimeZone>):1> ls -m
Comparable#methods: <  <=  ==  >  >=  between?
ActiveSupport::TimeZone#methods: <=>  =~  at  formatted_offset  local  local_to_utc  name  now  parse  period_for_local  period_for_utc  to_s  today  tzinfo  utc_offset  utc_to_local
self.methods: __pry__
[3] pry(#<ActiveSupport::TimeZone>):1> name
=> "Eastern Time (US & Canada)"

ls -m在上面的线上[2]打印对象上的方法(如果你向右滚动,你会看到name那里列出)。你可以看到[3]我可以name直接调用Time.zone我所在的对象并获得你正在寻找的输出。

于 2012-12-15T00:30:34.413 回答