我在测试部署到不同时区(PDT 和 CDT)的两个不同登台服务器的 Rails 应用程序时遇到了这个问题。两台服务器都有使用默认 UTC config.time_zone 的 rails 。除了时区配置不同之外,两台服务器的时钟设置都正确。
以下是我在 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。
最佳答案
ActiveSupportTimeZone.parse
不会尝试从给定字符串中提取时区信息。它只是提取日期和时间并将其转换为具有给定(本地)时区的 TimeWithZone。
str.to_time
会注意到“GMT-0700”行,但会生成没有时区的时间。
您可以通过提取“GMT.....”部分并将其转换为 UTC 偏移量来捏造它,该偏移量接近但不完全是时区。
关于ruby-on-rails - Rails Time.zone 解析没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056025/