Ruby on rails Rails Time.zone解析不';I don’我没有按预期工作
我在测试部署到不同时区(PDT和CDT)的两个不同暂存服务器上的rails应用程序时遇到了这个问题。两台服务器都有使用默认UTC config.time_区域的rails。除了时区配置不同之外,两台服务器的时钟都设置正确 下面是我在rails控制台中看到的内容: 在系统时区为CDT的服务器上Ruby on rails Rails Time.zone解析不';I don’我没有按预期工作,ruby-on-rails,ruby,timezone,activesupport,Ruby On Rails,Ruby,Timezone,Activesupport,我在测试部署到不同时区(PDT和CDT)的两个不同暂存服务器上的rails应用程序时遇到了这个问题。两台服务器都有使用默认UTC config.time_区域的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
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日期对象时,这是一种常见的场景
为什么这两个结果Time.zone.parse(相同的日期时间字符串)
不同?
如果在两个系统上运行以下操作,则结果显示正确:
"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偏移量(接近但不完全是时区)来伪造它。以下是我的操作方法
> Time.zone = "Hawaii"
=> "Hawaii"
> Time.zone.parse("Tue Mar 13 2012 13:00:00 GMT+1300 (NZDT)".sub("GMT",""))
=> Mon, 12 Mar 2012 14:00:00 HST -10:00
> Time.zone = "UTC"
=> "UTC"
> Time.zone.parse("Tue Mar 13 2012 13:00:00 GMT+1300 (NZDT)".sub("GMT",""))
=> Tue, 13 Mar 2012 00:00:00 UTC 00:00
嗨,Michael,我添加了更多关于在字符串上使用“to_time”方法时如何正确解析同一日期时间字符串的详细信息。这是一个始终如一、准确无误的问题。rails设法修补ActiveSupport::TimeZone以处理此处格式的日期字符串。您可以在注释中找到补丁。最初的问题现在在rails中得到修复,通过这次提交,问题现在在rails中得到修复。见@ShyamHabarakada谢谢你的提示。很高兴他们终于解决了这个问题