我在Rails 3.2中运行,我无法找到解析在任意时区给出的时间的好方法。
作为一个例子,这是我在单独的键中给出的格式
{
"start_date"=>"2013-04-24 13:00:00",
"timezone"=>"America/Los_Angeles",
"timezone_offset"=>"GMT-0700",
...
}
This question非常接近回答:
time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01')
问题是,当我将“America / Los_Angeles”作为Timezone.new
的论据时,它会吐出GMT-8的时区,我认为由于DST的变化。另一方面,我收到的数据定义了GMT的时区偏移量。因此,对于我的示例,所需的输出是GMT-7的时区。
如果我知道gmt偏移量而不是使用时区名称,有没有办法获得时区?
答案 0 :(得分:4)
您可以在[]
上使用ActiveSupport::Timezone
,以小时为单位传递gmt偏移量作为参数。
[](arg)
找到特定的时区对象。如果参数是a string,它被解释为要定位的时区的名称。 如果它是一个数值,则它是小时偏移量,或者是小时偏移量 要找到的时区的偏移量。 (第一个有偏移的人会 如果系统没有知道这样的时区,则返回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')
但是,要小心,因为偏移量可能相当于一个以上的时区,因为许多时区可以在同一偏移量上。