0
我在巴西,距離UTC有-3個小時。 我沒有做對Rails的時區的任何配置,我的控制檯行爲怪異,這裏是例子:Rails中奇怪的ActiveRecord時區行爲
1.9.3p194 :099 > FreeTime.first.starts_at
=> 2000-01-01 11:15:26 UTC
1.9.3p194 :100 > FreeTime.first.starts_at.localtime
=> 2000-01-01 09:15:26 -0200
1.9.3p194 :101 > FreeTime.first.starts_at.localtime.zone
=> "BRST"
1.9.3p194 :102 > Time.now
=> 2013-02-25 10:24:51 -0300
1.9.3p194 :103 > Time.now.zone
=> "BRT"
1.9.3p194 :104 > Time.zone
=> (GMT+00:00) UTC
正如你所看到的,問題是Rails的時間類計算出正確的我localzone(從我的系統時鐘),但ActiveRecord不知何故錯誤。我想知道爲什麼ActiveRecord錯誤地認爲我的時區是BRST(正確的是BRT),即使我沒有做任何配置。
很好的回答!我開始意識到在數據庫上擁有一個Time字段的最佳方法是使用Integer for Hour和Integer for Minutes。由於我在巴西,每次存儲時間時,都會在2000-01-01,因此出現在錯誤的時區。 – alexandrecosta 2013-02-25 14:36:48
@ user1261084:說實話,這很少是開始時間的最佳方式。在大多數情況下,將值存儲爲UTC是寫入方法 - 最好存在將本地日期/時間與時區一起存儲的情況。 – 2013-02-25 14:40:13
如果我每個星期二在15:00預約,夏季它將繼續在15:00。但是,如果我將它作爲「15:00:00 -0300」存儲在數據庫中,夏季時它會讓我知道約會是在「16:00:00 -0200」。非常混亂......時間是時間,因爲很多情況下它不依賴於區域。 DateTime依賴區域。我不明白爲什麼Rails堅持在Time數據庫屬性中記錄日期。它應該有一個更好的方法來避免這種混淆。現在我將時間存儲爲「11:00:00 -0300」,並且讓我回到「11:00:00 -0200」:https://gist.github.com/anonymous/5030404 – alexandrecosta 2013-02-25 15:06:54