2012-10-18 102 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" 
    

根据您的需求,你可以只格式化时间戳时应用手动偏移而忽略了时区

相关问题