1

저는 RoR에 처음으로 익숙하며 시간대 변환에 ​​문제가 있습니다. 데이터베이스에서 데이터를 가져올 때 (미국 중부 표준시에 저장 됨), 거기에있는 시간은 UTC로 간주되어 변환되기 때문에 5 시간 씩 잘못 작성됩니다. 내 application.rb 파일이 있습니다레일 3.1 시간대 UTC 및 중부 표준시 혼동

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = 'Central Time (US & Canada)' 

나는이 설정 지시어 eiher 하나를 제거하면 시간이 제대로 저장하지 않습니다. 내가 가지고있는 한, 시간은 데이터베이스에 올바르게 저장되지만, RoR은 올바르게 읽을 수 없습니다. 이 문제를 해결하려면 데이터베이스에서 UTC로 변환해야하는 모든 시간을 변환해야합니다. 나는 더 좋은 방법이 있다고 믿어야한다.

ENV [ 'TZ'] 설정도 시도했지만 아무 것도하지 않는 것 같습니다.

ENV['TZ'] = "US/Central" 

도움이 될 것입니다.

감사합니다. 나를 위해

+0

당신이 * sane * 일을하고 데이터베이스 자체의 데이터를 변경하여 UTC가 될 가능성이 있습니까? 특정 (비 UTC) 시간대에 모두 데이터를 저장하면 문제가 발생하며 DST 전환으로 인해 정보가 손실됩니다. –

+0

불행히도, 디자인 결정은 내 손이 아닙니다. 이 프로젝트의 경우, 미국 중부 표준시에 시간을 저장해야한다고 들었습니다. – user1485753

+0

중부 표준시를 의미합니까? CST가 아니며 항상 표준 * 시간입니다. –

답변

0

실제로, AR은에서 뭔가 다른 값을 설정 거부 : UTC/: 인 일을 무엇 지역

: 지역

config.active_record.default_timezone = 'Central Time (US & Canada)' 

이 줄에 다시 하락의 경고로 가득 로그로 끝났다 전체 스위칭 시스템 시간대

ENV['TZ'] = "US/Central" 

그래도 정확한 tz 이름을 사용하십시오. 유닉스 시간대 이름

가 타임 존 :: 또한이

위한 MAPPING, 이것은 Time.now == Time.current 후 그 양해 :: 에 ActiveSupport를 참조 ActiveSupport :: 시간대에서 사용 된 아니다; 그것은 지정된 시간대에서도 시간을 제공 할 것입니다;

그래서 이것은 솔루션보다 더 많은 종류의 해킹입니다.

관련 문제