在Rails中,如何以可以与ActiveSupport :: TimeZone [zone] .parse()一起使用的格式获取当前时区(Time.zone)?

时间:2012-12-14 23:24:05

标签: ruby-on-rails timezone

方法如何获取当前的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)

1 个答案:

答案 0 :(得分:46)

使用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 ,我通常用 {{3}检查类/模块/对象}} 即可。 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并获取您正在寻找的输出。