Ruby または Rails で東部時間を UTC に変換する最良の方法は何ですか?
概要
言及しているわけではありません
myDateTime = DateTime.now
myDateTime.new_offset(Rational(0, 24))
または
Time.now.utc
私が持っているのは、テキストの日付が東部時間で表示されているということです。
そのテキスト日付を DateTime に変換できます。それを east_date_time と呼びましょう。
さて、DateTime を含む変数がありますが、それが東部であることは私たち以外に誰も知りません。自分で変換するのはかなり面倒です。日付が夏時間 (DST) の場合 (今年は 3 月 8 日から 11 月 1 日まで)、UTC を取得するには Eastern_date_time 変数に 4 時間を追加する必要があります。日付が標準時 (ST) の場合は、次のようにします。 east_date_time 変数に 5 時間を追加する必要があります。
取得したものが東部 DateTime であることを指定し、それを UTC に変換するにはどうすればよいでしょうか…日付が DST/ST であるかどうかを判断し、4 時間または 5 時間を適切に適用するにはどうすればよいでしょうか?
取得したあらゆる種類の日付を UTC に変換して、データベースに保存したいと考えています。
編集:
編集:
text_time = "Nov 27, 2015 4:30 PM" #given as Eastern
myEasternDateTime = DateTime.parse text_time # => Fri, 27 Nov 2015 16:30:00 +0000
#now we need to specify that this myEasternDateTime is in fact eastern. However, it's our default UTC. If we use in_time_zone, it just converts the date at UTC to Eastern
myEasternDateTime.in_time_zone('Eastern Time (US & Canada)') # => Fri, 27 Nov 2015 11:30:00 EST -05:00
myEasternDateTime.utc # => Fri, 27 Nov 2015 16:30:00 +0000
それは私たちが望んでいることではありません。 myEasterDateTime が実際には東部であることを指定する必要があります。そのため、16:30:00 に myEasterDateTime.utc を実行すると、最終的には 20:30:00 になります。
どうすればこれを達成できますか?
解決策
DateTime クラスには time_in_zone メソッドがありました。
now.time_in_zone('UTC')
その後、名前が in_time_zone に変更されました。
DateTime.now.in_time_zone('US/Pacific')
=> Wed, 22 Apr 2015 12:36:33 PDT -07:00
現在 (2023 / Rails 7) では、次の方法で米国のすべてのゾーンのリストを取得できます。
ActiveSupport::TimeZone.us_zones.collect(&:name)
または別の国については:
ActiveSupport::TimeZone.country_zones('ES')