2012-10-19 190 views
2

我仍然對如何在Ruby中使用DateTime感到困惑。我想在數據庫中存儲GMT,至少我認爲我會的。但是,如何創建可用的本地化日期時間呢?Ruby DateTime.new混淆

date = Date.new(2012, 11, 24) 
=> #<Date: 2012-11-24 ((2456256j,0s,0n),+0s,2299161j)> 
new_appt = DateTime.new(date.year, date.month, date.day, 10, 0, 0) 
=> #<DateTime: 2012-11-24T10:00:00+00:00 ((2456256j,36000s,0n),+0s,2299161j)> 

此DateTime對象的GMT偏移量爲+00:00。我希望它是-07:00或-08:00,具體取決於給定日期是否遵守夏令時。我可以添加最後一個參數(+7+8)但是如何計算?

有沒有辦法告訴給定日期什麼時區偏移量(或將),並將其納入DateTime.new對象中,以便它可以正確存儲(並檢索)?

+0

你使用的是Rails還是Ruby?另外,您需要使用「給定日期」來計算來自哪個偏移量? – messick

+1

在格林威治時間有沒有商業理由要存儲?我建議讓所有系統都以UTC來說/存儲,並且只在需要人類可讀的時候才進行任何轉換。在一個視圖。 – Rym

+0

@Kevin我同意你評論的後半部分,但不是格林威治標準時間只是UTC的一種較舊的方式? – sawa

回答

5

欲瞭解更多信息,請參閱documentationTime

創建變量時,您可以使用Time.local,它會計算出DST是否正確。例如,若要在3.30 pm約會,你可以這樣做:(我的本地時間爲CST)

Time.local 2012, 10, 20, 15, 30 
=> 2012-10-20 15:30:00 +0800 

當存儲到數據庫中,我會建議存儲爲UTC,即variable.utc然後如果它需要再次呈現給用戶,這只是再次呼叫variable.localtime的問題。從內存中,這使得JavaScript等其他語言中的時間非常簡單。

+0

謝謝!我正在四處尋找'DateTime'類的答案,我想我應該一直在'時間'看!!?! – Meltemi