2013-04-23 69 views
4
Time.use_zone('Pacific Time (US & Canada)') do 
    p Time.zone.now 
end 

我得到如下:=> Sun, 14 Apr 2013 20:30:53 PDT -07:00时区的困惑(1小时关闭)

然而,当我做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小时?我觉得这都是同样的问题,我只是想念一个难题。

+0

简单的问题:你是否证实你的机器和SQL DB使用相同的时区信息?这真的只会导致数据库(可能)的问题? – 2013-04-23 05:03:04

+0

我确定我的Rails应用程序时区是UTC,并且我在ApplicationController中还有一个around_filter,用于说明在选择下拉列表中选择的用户时区 – st0rk 2013-04-23 05:04:39

+0

我对SQLite不够熟悉(假设您使用的Rails默认dev DB)知道它是使用系统时区还是它自己的。但是MySQL有一个时区配置可以不同于那个(它应该是不同的)会导致时间以这种奇怪的方式抵消的机器。只是好奇,如果你检查了。 – 2013-04-23 05:06:32

回答

2

输出正确。太平洋夏令时偏差为-7,而太平洋标准时间偏差为-8。我的猜测是,“Rails时区选择”(不管那是什么)只是向您显示“标准”偏移量,而不是当前偏移量。这在时区采集器中很常见。

夏威夷不实施任何形式的夏令时,因此可以解决您的第二个问题。

在您的第三点上,我将不得不更多地了解您的数据库平台,以回答为什么将值转换为UTC。鉴于这些是事件时间,我会说他们应该在UTC。他们也可能位于“聚会”地点的时区,但前提是也存储了UTC的偏移量。但绝不应该在服务器的时区。

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