用户从昨天开始输入一个日期范围,包括任何时区。
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中显示purchase_at时间,这可能会有所不同。
我不能使用in_time_zone作为输入from_date只有时间偏移,可以吗?
purchased_at.in_time_zone("Kathmandu")
=> Fri, 08 Jun 2012 15:29:26 NPT +05:45
有什么办法吗?
答案 0 :(得分: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
的偏移量。
这种方法存在问题:
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"