2012-05-08 11 views
1

私は
のRails 3.0.9
のActiveRecord-のSQLServerアダプタ3.0.15
TinyTds
MSSQL 2005
RailsのActiveRecordの3 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午後1時37分13秒0300であるのではなく、データベースに日付2012-05-08 10時37分13秒を取得していますか?

答えて

3

私は解決策を見つけた:あなたは、このような設定を記述する必要があり
application.rbで:助けを

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

私は日付の専門家ではないですが、何が、あなたがこの

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

> row.save 

のようにUTCに変更した場合、私はそれが正しい結果を与えるだろうと思い起こります。なぜこれが起こるのか(私の2セント):

日付はいつも何らかの標準で保存されるべきです(人々はどのようなフォーマットであるかが異なっているようです)。ただし、utcの時刻として保存する場合は、現地時間として表示する必要があります(簡単に行う)。上記の例では、レールは自動的にutcに変換されて格納されます。それは(これを変更する方法がわからない)UTC時間に

EDIT私はまだデフォルトを考える

Railsのに役立ちます願っています。しかし、UTC時間からデータベースにあなたがこれは私がデータベースに保存され、UTCからのlocaltimeを取得するためにオフに考えることができる唯一の方法である。この

Eclaim.first.change_date.localtime 

を呼び出す場合localtime.Whatが起こる呼び出すことができます。

+0

感謝を。しかし、あなたのアドバイスを使用して私は同じ結果を得る( –

0

ActiveRecordは、日付をUTC(以前はGMTとして知られています)で保存します。日付を書式設定すると、日付がローカルのタイムゾーンに変換されます。 Eclaim.where(:id => 1).firstの後に、row.change_dateを実行します。

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

** Tue、08 May 2012 10:37:13 UTC +00:00 **データベースにも** row.change_date **は私に** Tue、08を与える2012年5月10:37:13 UTC +00:00 **しかし必要** 2012-05-08 13:37:13 + 0300 ** –

関連する問題