2012-05-08 2 views
1

나는이
레일 3.0.9
액티브 - SQLSERVER 어댑터 3.0.15
TinyTds
MSSQL 2005
레일 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 13시 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 시간 (확실하지이를 변경하는 방법)에 기본값을 생각 도움이되기를 바랍니다. 그러나 UTC 시간에서 데이터베이스에 당신은 당신이 내가 데이터베이스에 저장된 UTC에서의 현지을 얻을 떨어져 생각할 수있는 유일한 방법이

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 ** –