我在Rails 3.2中运行,我不能想出一个很好的方法来解析在任意时区给我的时间。
作为一个例子,这是我在单独的键
中给出的格式{
"start_date"=>"2013-04-24 13:00:00",
"timezone"=>"America/Los_Angeles",
"timezone_offset"=>"GMT-0700",
...
}
这个问题几乎可以这样回答:
time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01')
问题是,当我把"America/los - angeles"作为Timezone.new
的参数时,它会吐出一个GMT-8的时区,我认为是由于夏时制的改变。另一方面,我收到的数据定义了与GMT相对的时区偏移量。因此,对于我的示例,期望的输出是时区为GMT-7。
是否有任何方法来获得时区,如果我知道gmt偏移量,而不是使用时区的名称?
您可以在ActiveSupport::Timezone
上使用[]
,以小时为单位传递gmt偏移量作为参数。
见api.rubyonrails.org:
[](arg)
定位指定的时区对象。如果参数是a字符串,它被解释为表示要定位的时区的名称。如果它是一个数值,则它是小时偏移量或秒偏移量要查找的时区的偏移量。(第一个有偏移量的将返回)。如果系统不知道这样的时区,则返回nil。
代码示例:
ActiveSupport::TimeZone["America/Los_Angeles"]
=> (GMT-08:00) America/Los_Angeles
ActiveSupport::TimeZone[-8]
=> (GMT-08:00) America/Los_Angeles
那么,你要做的是:
time = ActiveSupport::TimeZone[-7].parse('2013-04-24 13:00:00')
但是,要小心,因为一个偏移量可能相当于多个时区,因为许多时区可以在同一个偏移量上。