Как преобразовать Date в ActiveSupport::TimeWithZone с определенным часовым поясом?

У меня есть объект 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

Должен быть лучший способ создать это! Кто-нибудь знает, как это сделать?


person Ben Lee    schedule 14.11.2012    source источник


Ответы (1)


Не намного лучше, но отличается от вашего решения:

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
person doesterr    schedule 14.11.2012