我在测试部署到不同时区(PDT 和 CDT)的两个不同登台服务器的 rails 应用程序时遇到了这个问题。两台服务器都有使用默认 UTC config.time_zone 的导轨。除了时区配置不同之外,两台服务器的时钟设置都正确。
以下是我在 Rails 控制台中看到的内容:
在系统时区为 CDT 的服务器上,
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 05:00:00 UTC +00:00
在系统时区为 PDT 的服务器上,
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 07:00:00 UTC +00:00
该字符串Mon May 28 2012 00:00:00 GMT-0700 (PDT)
是客户端发送的任意日期时间值。这是使用通过 rails params 集合传入的 javascript Date 对象时的常见场景。
为什么两个结果Time.zone.parse(identical_date_time_string)
不同?
如果我在两个系统上运行以下命令,结果显示正确:
"Mon May 28 2012 00:00:00 GMT-0700 (PDT)".to_time
=> 2012-05-28 07:00:00 UTC
我在 ubuntu 上运行带有 ruby 1.9.3-p125 的 rails 3.2.3。