在Rails中,如何以可与ActiveSupport :: TimeZone .parse()一起使用的格式获取当前时区(Time.zone)?
方法如何获取当前的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)
使用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)
至于我如何得到这个(按要求) ,我只知道Time.zone
存在name
方法。 如果我不清楚这一点,我会查看文档。 如果它不在你那里(并且在这里 ) ,我通常用Pry检查类/模块/对象。 Pry是irb的替代品,让我可以做类似的事情
[1] pry(main)> cd Time.zone [2] pry(#):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(# ):1> name => "Eastern Time (US & Canada)"
ls -m
on the line [2]
在对象上打印方法(如果你向右滚动,你会看到那里列出的name
) 。 您可以在[3]
看到我可以直接在我所在的Time.zone
对象上调用name
,并获得您正在寻找的输出。