时区混乱(1小时休息)

时间:2013-04-23 04:48:51

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

Time.use_zone('Pacific Time (US & Canada)') do
  p Time.zone.now
end 

我得到以下内容:=> Sun, 14 Apr 2013 20:30:53 PDT -07:00

然而,当我做Rails时区选择......它非常清楚地说-8:00。为什么一个区域为-7而另一个区域为-8?

其他时候,像Hawaii这样的-10:00时区不会被一小时偏移。

我认为这与DST有关,但我更好奇是否意味着正确

最终我在一个日期选择器中使用它,我觉得很奇怪,当我使用Time.zone.parse(以及我在过滤器周围的时区)时,它将所有内容抵消1小时。

感谢

修改

这是一个类似的问题,我刚刚遇到另一段代码

2.0.0-p0 :006 >
2.0.0-p0 :006 > u.meetups.in_future.first.meetup_time
  Meetup Load (0.4ms)  SELECT `meetups`.* FROM `meetups` WHERE `meetups`.`user_id` = 1 AND (meetup_time >= '2013-04-23 04:46:48') ORDER BY meetup_time ASC LIMIT 1
 => Tue, 23 Apr 2013 05:43:00 UTC 00:00
2.0.0-p0 :007 >

注意结果与where子句相比的差异。

修改

它似乎适用于CST,但PST关闭约1小时?我觉得这是同样的问题,我只是错过了一块拼图。

1 个答案:

答案 0 :(得分:2)

输出正确。 Pacific Daylight Time的偏移量为-7,而Pacific Standard Time的偏移量为-8。我的猜测是“Rails时区选择”(无论是什么)只显示“标准”偏移,而不是当前的偏移。这在时区拣货员中很常见。

夏威夷没有实施任何类型的夏令时,所以这是第二点。

关于第三点,我需要了解更多有关数据库平台的信息,以回答为什么将值转换为UTC。鉴于这些是事件时间,我会说他们应该是UTC。它们也可能位于“聚会”位置的时区,但前提是还存储了与UTC的偏移量。但他们永远不应该在服务器的时区。

关于你的第四点,如果没有更多细节,很难说出你的意思。如果您认为有必要,请展开。