2017-12-28 31 views
1

그래서 입력 양식 컨트롤러 후 부모의 속성에 기초하여 END_TIME를 계산하기 위해 시간이 걸린다

"meeting"=>{"start_time[...] "start_time(4i)"=>"13", "start_time(5i)"=>"15"} 

datetime_select에서 제공 데이터베이스에 데이터를 입력 사이의 시간대를 다림질 및 저장

@initiate = DateTime.civil(date["start_time(1i)"].to_i, date["start_time(2i)"].to_i, date["start_time(3i)"].to_i, date["start_time(4i)"].to_i, date["start_time(5i)"].to_i) 
params[:meeting][:end_time] = @initiate + (@product.minutes.to_i).minutes 

그러나 GMT에서 1 시간이면 재미있는 일입니다. 데이터베이스가 다음과 같이 채워집니다.

["start_time", "2017-12-29 13:15:00.000000"], ["end_time", "2017-12-29 15:15:00.000000"] 

이 문제를 해결하는 가장 효과적이고 간결한 방법은 무엇입니까? 데이터베이스가 일관된 시간대 데이터가 기록되는 것을,이 사용자 TIME_ZONE보기 문제를 제외 있도록

+0

'civil'에는 오프셋을 포함하는 매개 변수가 있지만 지정되지 않은 경우 기본값은 UTC (0)입니다. 따라서 시작 시간은 UTC이며 종료 시간은 UTC이기도하므로 현지 시간대의 영향을받지 않으므로 실제로 120 분을 추가하면 종료 시간이 15:15로 표시됩니다. 아니, 60. –

+0

네, 그게 문제입니다. 입력 데이터는 UTC입니다. 그러나 datetime 형식으로 계산을 실행하면 레일스 (또는 루비)가 UTC로 변환하기 전에 계산을 현지 시간대로 변환합니다. 따라서 여분의 60 분. 이제 사용자가 다른 시간대에 있고 자신의 네이티브 영역에서 데이터를보고 싶다고 가정 할 때,이 처리는 중간에 있어야합니다. 비 뭉툭한 방법으로 그렇게하지 못했습니다 ... – Jerome

+0

흥미 롭습니다. 'config.time_zone = 'UTC'를 설정하면 도움이 될까요? ('config/application.rb' 파일에서) –

답변

1

DateTime에 더하기 또는 빼기를 수행하는 암시 시간대 변환을 수행하는 것이 나타날 것입니다 ... DateTime에 제공된 오프셋이 아닌 글로벌 config.time_zone 설정을 사용합니다 (지정되지 않은 경우 기본값은 0입니다).

이 문제를 해결하려면 config/application.rb 파일에 config.time_zone = 'UTC'을 설정하십시오.

이것은 시스템 기본 표준 시간대 대신 UTC를 사용하여 전체 응용 프로그램에 영향을줍니다.