3

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

4

2 回答 2

0

ActiveSupportTimeZone.parse不尝试从给定字符串中提取时区信息。它只是提取日期和时间并将其转换为具有给定(本地)时区的 TimeWithZone。

str.to_time会注意到“GMT-0700”行,但会产生一个没有时区的时间。

您可以通过提取“GMT .....”部分并将其转换为接近但不完全是时区的 UTC 偏移量来捏造它。

于 2012-04-07T16:21:00.970 回答
0

这是我的做法

> 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
于 2013-04-11T03:24:40.350 回答