2010-07-14 2 views
6

난 레일 어플리케이션이 아닌 레일즈 애플리케이션에 의해 쓰여지고 레일즈 어플리케이션이 읽는 데이터베이스가 있습니다. 데이터베이스에는 datetime 필드가 있으며이 필드에 저장된 데이터는 동부 표준시에 저장됩니다. 내 레일 앱에서, config.time_zone = 'Eastern Time (US & Canada)'을 수행하여 내 environment.rb 파일에서 애플리케이션의 시간대를 설정할 수 있음을 알고 있습니다. 그러나 레일즈는 데이터베이스에 저장된 데이터가 UTC에 저장되어 있다고 가정하고 config.time_zone을 UTC로 변환합니다.레일/활성 레코드 데이터베이스 필드 시간대

레일스에게이 특정 필드 또는 내 모든 datetime 필드의 데이터를 동부 표준시가 아닌 UTC라고 알리는 방법이 있습니까?

답변

0

첫 번째 제안은 다른 응용 프로그램을 수정하는 것입니다. 다른 응용 프로그램은 날짜가있는 UTC 오프셋을 저장해야합니다. 문제를 해결하기 위해 노력한다면 더 많은 것을 만들 것입니다. 예를 들어 일광 절약 시간이되면 어떻게 될까요? 그러면 오프셋이 바뀌겠습니까?

말했다과 다른 선택의 여지가없는되고 - 나는 필드 created_at를 들어, 다음 행과 함께 뭔가를 할 것이다 :

def created_at_in_eastern 
    DateTime.parse(self.created_at.strftime("%D %T EST")) if self.created_at 
end 

또는 데이터가 저장 방법에 따라 EDT을 사용할 수 있습니다, 단지 면책 조항을 읽어 맨 위 - 이것은 해킹입니다!

1

config.active_record.default_timezone - 지정된 시간대에있는 것으로 데이터베이스 시간을 해석하고, 속성 updated_at created_at & 작업이 시간대를 사용하는 액티브을 지시합니다. application.rb에서 레일 3.0.5에

8

이 작동 :

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = :local 
관련 문제