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



我在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')

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

相关内容

  • 没有找到相关文章

最新更新