4

我在 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 的时区,我认为是由于 DST 的变化。另一方面,我收到的数据定义了与 GMT 的时区偏移量。因此,对于我的示例,所需的输出是 GMT-7 的时区。

如果我知道 gmt 偏移量,而不是使用时区的名称,有什么方法可以获取时区?

4

1 回答 1

4

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

api.rubyonrails.org 所示

[](arg)

定位特定时区对象。如果参数是字符串,则将其解释为要定位的时区名称。如果它是一个数值,则它是要查找的时区的小时偏移量或第二个偏移量。(将返回具有该偏移量的第一个。)如果系统不知道这样的时区,则返回 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')

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

于 2013-03-15T20:39:29.497 回答