返回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中显示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中拉出。

这种方法存在问题:

  1. 从偏移到名称的映射不是唯一的。
  2. 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" 

最新更新