在ruby中解析任意gmt偏移量的时间

时间:2013-03-15 20:23:42

标签: ruby-on-rails ruby ruby-on-rails-3 parsing timezone

我在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偏移量而不是使用时区名称,有没有办法获得时区?

1 个答案:

答案 0 :(得分:4)

您可以在[]上使用ActiveSupport::Timezone,以小时为单位传递gmt偏移量作为参数。

api.rubyonrails.org

[](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')

但是,要小心,因为偏移量可能相当于一个以上的时区,因为许多时区可以在同一偏移量上。