2011-02-23 17 views
2

我從沒有明確設置其時區的API獲取日期時間字段。當我把它放到一個數據庫中時,它假設日期時間必須是GMT,但時區實際上是在芝加哥時間。 (我說的是芝加哥時間,因爲我仍然不確定這個API是否會影響DST。)在將此時間轉換爲GMT之前,將其添加到數據庫之前,最佳方式是什麼?設置傳入xml數據的時區

這裏我指的是其中一個節點的XML樣本:

<FromDateTime>2011-03-17 08:00:00</FromDateTime> 

在Ruby中,我使用這本記錄添加到數據庫中。

:starttime => DateTime.parse(row.at_xpath("FromDateTime/text()").to_s), 

我認爲我需要做的是在CST和GMT之間的小時差中添加最後一次Ruby調用,對嗎?我會怎麼做?

謝謝!

回答

2

您可以使用時間嗎?日期時間不是夏令時時間。對於給定的日期/時間,時間會自動設置爲您本地的GMT偏移量,並在需要時設置DST。

irb(main):014:0> require 'time' 
irb(main):015:0> Time.parse('2011-03-17 08:00:00') 
=> Thu Mar 17 08:00:00 -0400 2011 
irb(main):022:0> Time.parse('2011-03-17 08:00:00').dst? 
=> true 

下面是標準時間(我在EST)

irb(main):025:0> Time.parse('2011-01-17 08:00:00') 
=> Mon Jan 17 08:00:00 -0500 2011 
irb(main):023:0> Time.parse('2011-01-17 08:00:00').dst? 
=> false 

的情況下,如果你正在使用的ActiveSupport http://api.rubyonrails.org/classes/DateTime.html您可以設置任意時間段:

irb(main):039:0> Time.zone = 'America/Chicago' 
=> "America/Chicago" 
irb(main):040:0> Time.parse('2011-03-17 08:00:00') 
=> Thu Mar 17 08:00:00 -0400 2011 
+0

我有點恨這些時區:)時間是否適用於架構中設置爲datetime的字段?還是必須創建一個遷移來更改列類型? – Sandro 2011-02-23 17:39:27

+0

如果使用本地時間保存模型,AR會將其轉換爲數據庫的UTC。默認情況下,它也會在本地時間顯示出來。如果你需要這個本地時間是utc,你可以在它上面調用.utc。 – 2011-02-23 17:48:06