用户输入一个日期范围,请让您使用任何时区。
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中显示fighted_at的时间。
我不能将in_time_zone用作_date的输入,只有时间偏移,我可以吗?
purchased_at.in_time_zone("Kathmandu")
=> Fri, 08 Jun 2012 15:29:26 NPT +05:45
有什么方法吗?
给出偏移,您可以从 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
中拉出。
这种方法存在问题:
- 从偏移到名称的映射不是唯一的。
- DST如果
ActiveSupport::TimeZone[]
给您错误的名称可能是一个问题。
根据您的需求,您可以手动应用偏移量,并在格式化时间戳时忽略时区:
> (Time.now.utc + 5.hours + 45.minutes).strftime('%Y-%m-%d %H:%M:%S +0545')
=> "2012-10-18 12:40:12 +0545"