为什么zone.utc_offset和zone.now.utc_offset之间存在差异?

时间:2015-12-17 03:39:55

标签: ruby-on-rails ruby timezone

在rails控制台中:

> ActiveSupport::TimeZone['Samoa'].utc_offset
=> -39600
> ActiveSupport::TimeZone['Samoa'].now.utc_offset
=> 50400

我希望看到基于夏令时的差异,也许是一小时。 为什么这里有巨大的差异?

<小时/> 更新: Samoa是唯一具有此行为的时区。很容易找到:

ActiveSupport::TimeZone
  .all
  .select{|tz| (tz.now.utc_offset - tz.utc_offset).abs/(3600) > 1}

1 个答案:

答案 0 :(得分:4)

2011年12月29日,萨摩亚时区跨越国际日期变更线。 https://en.wikipedia.org/wiki/Samoa_Time_Zone

因此,zone.utc_offset值是针对2011年12月29日之前的值,并且在此之后的任何时间都适当调整了utc_offset。

> ActiveSupport::TimeZone['Samoa'].parse('2011-01-01').utc_offset
-36000
> ActiveSupport::TimeZone['Samoa'].parse('2015-01-01').utc_offset
50400