我今天早些時候發佈了一個問題,當時我還沒有就此問題進行調查。我可以在這裏更簡潔。Ruby on Rails和Active Record獨立腳本不同意數據庫值:時間戳
我在Windows上使用MySQL運行RoR 2.1.2。 SQL服務器的本地時區是UTC。我的本地時區是太平洋(-0800)
我有一個模型:時間戳類型列,我可以做這樣的事情有:在
record = Record.find(:first)
record.the_time = Time.now()
當我做了「從記錄中選擇*」數據庫中顯示的時間比我的本地時間提前8小時,這是正確的,因爲數據庫在UTC。 (我已經通過一個簡單的'select now()'和'select utc_timestamp()'來驗證它'用utc'思考')。這就是麻煩開始的地方。如果我在一個視圖中顯示的時間:
<%= h record.the_time %>
...然後我回到正確的時間,以UTC格式顯示。如果我在當地時間16點40分給數據庫寫信,數據庫顯示00:40:00。
但是,如果我運行一個獨立的腳本:
record = Record.find(:first)
puts record.the_time
...然後我回來,我存儲在數據庫中(0時40分〇〇秒)的UTC時間,但與當地時區:
Wed Nov 26 00:40:00 (-0800) 2008
...八小時的時間扭曲。爲什麼存儲時間正確翻譯它,但檢索它不?如果我比較數據庫中最近一次存儲的時間並將其與當前時間進行比較,則當前時間較短 - 告訴我這不僅僅是一個字符串轉換問題。
任何想法?