如何将Date转换为具有特定时区的ActiveSupport :: TimeWithZone?

时间:2012-11-14 18:11:51

标签: ruby timezone activesupport

我有一个像这样的Date对象:

>> the_date
=> Tue, 12 Jun 2012

>> the_date.class
=> Date

存储为字符串的时区:

>> tz = "Pacific Time (US & Canada)"
=> "Pacific Time (US & Canada)"

我希望在给定时区的给定日期的午夜生成一个ActiveSupport :: TimeWithZone(不是在utc中给定日期的午夜,然后转换为给定时区)。到目前为止,我发现这样做的最好方法是非常难看:

>> the_time = ActiveSupport::TimeZone.new(tz).parse(the_date.to_s)
=> Tue, 12 Jun 2012 00:00:00 PDT -07:00

>> the_time.class
=> ActiveSupport::TimeWithZone

必须有更好的方法来产生这个!有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

不是更好,但与您的解决方案不同:

the_date.to_time.in_time_zone
#=> Mon, 11 Jun 2012 22:00:00 UTC +00:00

the_date.to_time.in_time_zone(tz)
#=> Mon, 11 Jun 2012 15:00:00 PDT -07:00

Time.zone = tz
#=> "Pacific Time (US & Canada)"

the_date.to_time.in_time_zone
#=> Mon, 11 Jun 2012 15:00:00 PDT -07:00

the_date.to_time.in_time_zone.end_of_day
#=> Mon, 11 Jun 2012 23:59:59 PDT -07:00

(the_date.to_time.in_time_zone + 1.day).beginning_of_day
#=> Tue, 12 Jun 2012 00:00:00 PDT -07:00