2

次のような 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

これを生成するためのより良い方法があるはずです! 誰でもこれを行う方法を知っていますか?

4

1 に答える 1

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
于 2012-11-14T18:57:42.427 に答える