2012-10-18 70 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時間。

我不能使用in_time_zone作爲輸入from_date只有時間偏移量,我可以嗎?

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" 
    

根據您的需求,你可以只格式化時間戳時應用手動偏移而忽略了時區

相關問題