2012-10-18 6 views
1

사용자는 어제부터 시간대를 사용하여 날짜 범위를 입력합니다.요청한 TimeZone에 Ruby/Rails DateTime 또는 ActiveSupport :: TimeWithZone 객체를 반환하십시오.

from_datetime = "10/01/2012 00:00 +0545" 

나는 다음과 같은 책 시간을 구입 얻을 :

purchased_at = Book.where("created_at > #{from_date}").purchased_at 
=> Fri, 08 Jun 2012 09:44:26 UTC +00:00 

문제는이 내게 UTC 시간을 제공하지만 다를 수 있습니다 요청 TIME_ZONE에서 purchased_at 시간을 표시 할 수 있습니다.

입력 된 from_date에 시간 오프셋 만있을 수 있으므로 in_time_zone을 사용할 수 없습니까?

purchased_at.in_time_zone("Kathmandu") 
=> Fri, 08 Jun 2012 15:29:26 NPT +05:45 

어떨까요?

답변

2

오프셋주고, 당신은 ActiveSupport::TimeZone에서 시간대 이름을 얻을 수 있습니다 :

> ActiveSupport::TimeZone[5.hours + 45.minutes] 
=> (GMT+05:45) Kathmandu 

는 그런 다음 in_time_zone에 그 손 수 있습니다

> Time.now.in_time_zone(ActiveSupport::TimeZone[5.hours + 45.minutes]) 
=> Thu, 18 Oct 2012 12:33:12 NPT +05:45 

당신이 (가)와 from_datetime에서 오프셋 당길 수 당신이 들어오는 형식을 안다면 간단한 논쟁의 비트.

  1. 이름으로 오프셋에서 매핑이 고유하지 :

    이 방법에 문제가 있습니다.

  2. ActiveSupport::TimeZone[]이 잘못된 이름을 지정하면 DST가 문제가 될 수 있습니다.

    > (Time.now.utc + 5.hours + 45.minutes).strftime('%Y-%m-%d %H:%M:%S +0545') 
    => "2012-10-18 12:40:12 +0545" 
    
    : 타임 스탬프를 포맷 할 때

필요에 따라, 당신은 단지 시간대를 수동으로 오프셋을 적용하고 무시할 수

관련 문제