2011-04-27 3 views
1

Ruby 1.9.2에서 사용자가 업무 시간을 입력하고 MySQL 데이터베이스에 저장되는 Rails 3 애플리케이션이 있습니다. 그러나 사용자가이 작업을 수행하면 입력 된 시간 인 "8:00 AM"이 데이터베이스에 3pm으로 저장됩니다. 시간대에 관계없이 입력 한대로 저장되기를 바랍니다. 이 작업을 수행하는 가장 좋은 방법은 모든 것을 UTC로 설정하고 시간대 (아리조나)를 무시하는 것이지만 레일은 내 설정을 무시하는 것 같습니다. 예 :Time.zone을 UTC로 설정하고 그대로 유지하려면 어떻게해야합니까?

Time.zone = 'UTC' 

mon_open_date = Time.parse(params[:venue][:mon_open_at]) rescue nil 

# => 2011-04-27 08:00:00 -0700 

MySQL은 그 결과

+-------------+ 
| mon_open_at | 
+-------------+ 
| 15:00:00 | 
+-------------+ 
1 row in set (0.00 sec) 

어떤 아이디어가?

답변

4

Time.parse는 항상 문자열을 컴퓨터의 로컬 시간대로 구문 분석합니다. 이를 지정된 시간대 UTC로 구문 분석하려면 Time.zone.parse을 사용해야합니다.

+0

그 트릭을 했어, 고마워! – huertanix

2

항상 MySQL uses the server's time zone setting, by default (데이터베이스 관리자 인 경우 변경할 수 있지만).

TIMESTAMP 열에 의 날짜/시간 값을 저장하면 (저장 장치의 경우 UTC로 변환되고 다시 사용을 위해 서버의 시간대로 다시 변환 됨) 표준 시간대에 저장됩니다. 당신이 당신의 날짜를 저장하면 사용자가 입력하는

가/DATETIME 열에서 시간, 값이 정확히 저장되어 - 서버의 시간대를 변경 한 다음 DATETIME 컬럼에서 이전 값을 선택하면 볼 수 있습니다 입력 한 값과 정확히 일치합니다.

더 세밀한 점에 대해서는 DATETIME/TIMESTAMP 열의 설명서를 확인하십시오.

관련 문제