【发布时间】:2012-04-20 19:28:55
【问题描述】:
我在测试部署到不同时区(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。
【问题讨论】:
-
针对rails github.com/rails/rails/issues/5770提出了一个问题
-
设法修补 ActiveSupport::TimeZone 以处理此处格式的日期字符串。您可以在 cmets 中找到补丁 here。
-
原始问题现已在 rails 中修复,此提交 github.com/rails/rails/commit/…
标签: ruby-on-rails ruby timezone activesupport