2012-05-08 40 views
1

我有
的Rails 3.0.9
的ActiveRecord - SQLSERVER適配器3.0.15
TinyTds
MSSQL 2005
的Rails 3 ActiveRecord的Time.now問題

我有使用Time.now問題。
這就是我在控制檯上所做的:
有人可以解釋這種行爲嗎?

irb(main):026:0> row = Eclaim.where(:id => 1).first 
    => #<Eclaim id: 1, id_user: 1, property: "inv", app_number: nil, patent_number: 
    nil, native_number: nil, title: nil, applicants: nil, receive_date: nil, change_ 
    date: "2012-05-08 10:20:44"> 

    irb(main):027:0> row[:change_date] = Time.now 
    => 2012-05-08 13:37:13 +0300 

    irb(main):028:0> row.save 
    => true 

    irb(main):029:0> row = Eclaim.where(:id => 1).first 
    => #<Eclaim id: 1, id_user: 1, property: "inv", app_number: nil, patent_number: 
    nil, native_number: nil, title: nil, applicants: nil, receive_date: nil, change_ 
    date: "2012-05-08 10:37:13"> 

    irb(main):047:0> Time.zone 
    => (GMT+00:00) UTC 

爲什麼會收到日期2012-05-08十點37分十三秒在數據庫中,而不是被2012-05-08十三點37分13秒+0300

回答

3

我已經找到了解決辦法:
application.rb你應該寫這樣的設置:

config.time_zone = 'Riga' 
config.active_record.default_timezone = :local 
0

我不是日期的專家,但如果你改變爲UTC這樣

> row[:change_date] = Time.now.localtime 

> row.save 

會發生什麼,我認爲,這將使正確的結果。至於爲什麼會發生這種情況(我的2美分):

應該總是將日期存儲在某個標準中(人們似乎對於什麼格式有所不同)。但是請注意,當以utc時間存儲時,您需要將時間顯示爲本地時間(輕鬆完成)。在上面的例子中,rails會自動轉換爲utc並存儲它。希望它可以幫助

編輯

Rails的,我認爲仍然默認爲UTC時間(不知道如何改變這一點)。然而從UTC時間在數據庫中,你可以打電話,如果你把這個

Eclaim.first.change_date.localtime 

這是我能想到得到從存儲在數據庫中的UTC的本地時間只有這樣localtime.What發生。

+0

感謝您的幫助。但使用你的建議,我得到了相同的結果( –

0

ActiveRecord以UTC(以前稱爲GMT)存儲日期。格式化日期時,它會將日期轉換回當地時區。在Eclaim.where(:id => 1)之後,首先執行row.change_date。

irb(main):029:0> row = Eclaim.where(:id => 1).first 
irb(main):029:0> row.change_date 
+0

還有**星期二,2012年5月8日10:37:13 UTC +00:00 **數據庫也。** row.change_date **給我**星期二,08 May 2012 10:37:13 UTC +00:00 **但我需要** 2012-05-08 13:37:13 + 0300 ** –