2011-02-23 4 views
2

명시 적으로 시간대를 설정하지 않은 API에서 datetime 필드를 가져옵니다. 이것을 데이터베이스에 배치하면 datetime이 GMT가되어야한다고 가정하지만 시간대는 실제로 시카고 시간입니다. (나는이 API가 DST를 고려하는지 아직도 확신 할 수 없기 때문에 시카고 시간을 말합니다.) 데이터베이스에 추가하기 전에이 시간을 GMT로 변환하는 가장 좋은 방법은 무엇입니까? 여기 들어오는 xml 데이터의 시간대를 설정하십시오.

내가 말하는 겁니다 노드 중 하나의 XML 예제입니다 : 루비에서

<FromDateTime>2011-03-17 08:00:00</FromDateTime> 

, 나는 데이터베이스에이 레코드를 추가하려면이 사용하고 있습니다.

:starttime => DateTime.parse(row.at_xpath("FromDateTime/text()").to_s), 

내가 무엇을 내가해야 할 것은 바로,이 마지막 루비 호출에 CST와 GMT 간의 시간 차이를 추가 할 생각? 내가 어떻게 그럴 수 있니?

감사합니다.

답변

2

대신 시간을 사용할 수 있습니까? DateTime은 일광 절약 시간제를 지원하지 않습니다. 시간은 주어진 날짜/시간에 대해 GMT 오프셋을 자동으로 설정하고 필요할 경우 DST를 설정합니다. 여기

irb(main):014:0> require 'time' 
irb(main):015:0> Time.parse('2011-03-17 08:00:00') 
=> Thu Mar 17 08:00:00 -0400 2011 
irb(main):022:0> Time.parse('2011-03-17 08:00:00').dst? 
=> true 

표준 시간 (나는 EST에서 오전)

irb(main):025:0> Time.parse('2011-01-17 08:00:00') 
=> Mon Jan 17 08:00:00 -0500 2011 
irb(main):023:0> Time.parse('2011-01-17 08:00:00').dst? 
=> false 

의 경우 당신이 ActiveSupport http://api.rubyonrails.org/classes/DateTime.html를 사용하는 경우 임의의 시간대로 설정할 수 있습니다

irb(main):039:0> Time.zone = 'America/Chicago' 
=> "America/Chicago" 
irb(main):040:0> Time.parse('2011-03-17 08:00:00') 
=> Thu Mar 17 08:00:00 -0400 2011 
+0

내가 좀 싫어 이 시간대 :) 시간은 스키마의 datetime으로 설정된 필드에서 작동합니까? 또는 열 유형을 변경하기 위해 마이그레이션을 만들어야합니까? – Sandro

+0

로컬 시간으로 모델을 저장하면 AR이 db에 대해 UTC로 변환합니다. 기본적으로 너무 현지 시간에 그것을 밖으로 가져온다. localtime이 필요하다면 .utc를 호출 할 수 있습니다. –

관련 문제