ruby-on-rails - Rails Time.zone 解析没有按预期工作

标签 ruby-on-rails ruby timezone activesupport

我在测试部署到不同时区(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/

相关文章:

jquery - 使用 capybara / cucumber 测试 jquery-file-upload

ruby-on-rails - Rails 片段缓存 : would 100K+ fragments degrade performance?

ruby - 听不与 sass-3.3.0.rc.3 一起工作 - 未定义的方法

ruby-on-rails - Rails 辅助方法 :attribute_changed? 在 Rails 3.2.15 中如何工作?

c++ - 如何获取当前时区?

cakephp - 如何在 cakephp 中设置默认时区?

javascript - 我想在不重新加载页面的情况下更改<audio>的值

javascript - jquery 抛出 "Uncaught RangeError: Maximum call stack size exceeded "

ruby-on-rails - to_json 不将特殊字符转换为 unicode 样式

python - 如何告诉 Numpy 以 UTC 而不是本地时区打印时间?