关于时区:Rails 2.3.5解析日期不一致

Rails 2.3.5 parses date inconsistently

首先,由于Redmine,我使用的是旧版本的Rails。

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

但是,我发现Time.parse的工作方式不一致(或被误解了)。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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。

1
2
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。

是什么原因造成的?

感谢您的阅读。

尼罗


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