【问题标题】:Time zone confusion (1 hour off)时区混乱(休息 1 小时)
【发布时间】:2013-04-16 04:26:56
【问题描述】:
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 小时??我觉得这都是同一个问题,我只是漏掉了一块拼图。

【问题讨论】:

  • 简单问题:您是否确认您的机器和 SQL DB 使用相同的时区信息?这真的只会导致数据库的问题(可能)?
  • 我已确保我的 rails 应用程序时区是 UTC,并且我在 ApplicationController 中还有一个 around_filter 用于说明在选择下拉列表中选择的用户时区
  • 我对 SQLite(假设您使用 Rails 默认开发数据库)不够熟悉,无法知道它是使用系统时区还是它自己的。但是 MySQL 的时区配置可能与机器不同(如果它不同的话)会导致时间以奇怪的方式偏移。只是好奇你是否检查过。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多