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

In ruby parse a time in an arbitrary gmt offset

我在Rails 3.2中运行,我无法想出一个很好的方法来解析在任意时区给我的时间。

作为一个例子,这是我在单独的键中给出的格式

1
2
3
4
5
6
{
 "start_date"=>"2013-04-24 13:00:00",
 "timezone"=>"America/Los_Angeles",
 "timezone_offset"=>"GMT-0700",
  ...
}

这个问题非常接近于回答:

1
time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01')

问题是,当我将"America / Los_Angeles"作为Timezone.new的参数时,它会吐出GMT-8的时区,我认为由于DST的变化。 另一方面,我收到的数据定义了GMT的时区偏移量。 因此,对于我的示例,期望的输出是GMT-7的时区。

如果我知道gmt偏移量而不是使用时区名称,有没有办法获得时区?


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

如api.rubyonrails.org所示:

[](arg)

Locate a specific time zone object. If the argument is a
string, it is interpreted to mean the name of the timezone to locate.
If it is a numeric value it is either the hour offset, or the second
offset, of the timezone to find. (The first one with that offset will
be returned.) Returns nil if no such time zone is known to the system.

代码示例:

1
2
3
4
ActiveSupport::TimeZone["America/Los_Angeles"]                              
 => (GMT-08:00) America/Los_Angeles
ActiveSupport::TimeZone[-8]                              
 => (GMT-08:00) America/Los_Angeles

那么,你要做的是:

1
time = ActiveSupport::TimeZone[-7].parse('2013-04-24 13:00:00')

但是,请注意,因为偏移量可能相当于一个以上的时区,因为许多时区可能位于相同的偏移量上。