Rails 2.3.5不一致地解析日期

时间:2011-04-08 22:46:22

标签: ruby-on-rails timezone dst

首先,我使用旧的rails版本,因为Redmine。

我正在尝试编写一个用于将Redmine的数据库转储时间戳更新到特定时区的脚本,因此我需要ruby来解析它们并更改时区,假设rails可以处理dst边界。

然而,我发现(或误解)Time.parse如何工作不一致。

这是我在Rails 2.3.5原始应用程序上执行的脚本:

impulse@ImpulseServer:~/pgtz_converter$ script/console
Loading development environment (Rails 2.3.5)
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0200 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-20 00:00:00')
=> Sun Feb 20 00:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> exit

以上是上面发生的事情:

服务器本地日期时区是BRT。

impulse@ImpulseServer:~/pgtz_converter$ date
Fri Apr  8 19:17:34 BRT 2011

首先,我检查Time.zone(UTC),然后尝试解析DST日期。 输出很好,DST打开(我假设Time.zone = UTC意味着Ruby检查了服务器区域配置并使用它)。 然后我尝试另一个日期,其中DST不再活动(DST在2011年2月20日00:00结束)。 正确解析此日期(GMT-3)。

现在问题就开始了。

我尝试再次解析旧的DST日期,结果是错误的!它不被视为DST日期!

我想也许解析改变了Time.zone,但是当它被粘贴时它始终是UTC。

造成这种情况的原因是什么?

感谢您的阅读。

尼罗

1 个答案:

答案 0 :(得分:0)

您可能希望更改为在rails中使用ActiveSupport :: TimeWithZone类。