2014-05-23 3 views
2

나는 datetimepicker를 사용하고 params에서 얻은 문자열 datetime을 특정 사용자 별 시간대의 datetime에 저장해야합니다. 그것은 내가 적절한 UTC 날짜/시간을 데이터베이스에 저장할 수있게 해줍니다.문자열을 특정 시간대의 datetime으로 변환

params[:notify_at] #=> "2014-07-05 14:30:00" 

user.time_zone #=> #<ActiveSupport::TimeZone:0x00000007535ac8 @name="Warsaw", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Europe/Warsaw>, @current_period=nil> 

그리고 나는 같은 것을 할 싶습니다

date = params[:notify_at].to_datetime(user.time_zone) #=> Sat, 05 Jul 2014 12:30:00 +0000 
(its 14:30 in user's localtime but 12:30 in UTC) 

답변

3

당신은 in_time_zone 방법을 사용할 수 있습니다. 예를 들어

사용 사례에 대한 그래서
DateTime.current.in_time_zone("Alaska") 
# => Fri, 23 May 2014 07:21:30 AKDT -08:00 

:

params[:notify_at].to_datetime.in_time_zone(user.time_zone) 

프로 팁 : 레일 V4를 사용하는 경우 + 직접 문자열에 이렇게 실제로 할 수

"2014-07-05 14:30:00".in_time_zone("Alaska") 
# => Sat, 05 Jul 2014 14:30:00 AKDT -08:00 

UPDATE

문자열을 시간대로 직접 구문 분석 할 수 있습니다 (wh 조립식 문자열이 이미이 같은) 그 시간대에 있어야합니다 : 사용 사례에 대한 그래서

Time.zone.parse("2014-07-05 14:30:00") 
# => Sat, 05 Jul 2014 14:30:00 CEST +02:00 

는 수행

user.time_zone.parse(params[:notify_at]) 
+0

이미 이런 식으로 시도했지만 그게 내가 아니야. 할 뜻. to_datetime은 문자열을 UTC로 변환합니다 (어쨌든 UTC는 14:30). in_time_zone ('Warsaw')을 호출하면 2014 년 7 월 5 일 16:30:00 CEST +02 : 00 토요일에 'Sat, 2014 년 7 월 5 일 14:30:00 CEST +02 : 00 '. – Jacka

+0

아, 알겠습니다. 내 대답이 업데이트되었습니다. 그게 작동하는지 확인하십시오. – pdobb

+0

그래, 그게 내 생각뿐 아니라 올바른 대답을 주셔서 감사합니다 :) – Jacka

0

이 시도 : -

date = params[:notify_at].to_datetime.in_time_zone(user.time_zone) 

레일 콘솔 출력 : -

1.9.3p385 :004 > d= "2014-07-05 14:30:00" 
=> "2014-07-05 14:30:00" 
1.9.3p385 :010 > d.to_datetime.in_time_zone("Pacific Time (US & Canada)") 
=> Sat, 05 Jul 2014 07:30:00 PDT -07:00 
1.9.3p385 :011 > d.to_datetime.in_time_zone("Alaska") 
=> Sat, 05 Jul 2014 06:30:00 AKDT -08:00 
1.9.3p385 :012 > to_datetime.in_time_zone 
관련 문제