2011-04-08 30 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