2011-04-08 52 views
0

首先,由于Redmine的原因,我使用旧的rails版本。Rails 2.3.5解析日期不一致

我想写一个脚本来更新Redmine的数据库转储timestamps到特定的时区,因此我需要ruby来解析它们并更改时区,假设rails可以处理dst边界。

尽管如此,我发现Time.parse的工作方式中存在不一致(或误解)。

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

[email protected]:~/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。

[email protected]:~/pgtz_converter$ date 
Fri Apr 8 19:17:34 BRT 2011 

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

现在问题开始了。

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

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

这是什么造成的?

谢谢您的阅读。

尼罗

回答

0

您可能要更改使用的ActiveSupport :: TimeWithZone类轨。

+1

谢谢,这些变化诀窍: 'Time.zone ='Brasilia'' and'Time.zone.parse('A DATE')。utc' \ o / – Niloct 2011-04-11 15:04:28