はじめに
先日Time.current
を使う機会があり、これを出力してみると以下のような結果が出ました。
Sun, 24 Sep 2023 23:27:44 JST +09:00
JST
とは日本標準時(Japan Standard Time)
+09:00
とは世界標準時から+9時間の時差がある という意味です。
ふと、こんなことを考えました。
「これ、日本以外の時差も見れんじゃね?」
2つの方法があるのでハワイの時差を例に出して紹介します。
方法1 config/application.rb
で config.time_zone = '○○'
を変更する
手順は以下の通りです。
手順1
config/application.rb
でconfig.time_zone = '○○'
を特定の地域名に変更する
config.time_zone = 'Hawaii'
手順2
pp
でTime.current
を出力する
pp Time.current
-> Sun, 24 Sep 2023 05:32:51 HST -10:00
HST(ハワイ標準時) - 10:00
と表示されていますね。
これは世界標準時より-10時間の時差があることを示しています。
日本は+9時間の時差なので、「ハワイと日本の時差は19時間で、日本の方が時間が進んでいる」ということがわかりますね。
方法2 ActiveSupport::TimeZone
を利用する
手順は以下の通りです。
手順1
下記のコードを書く
ActiveSupport::TimeZone.all.each {|tz|
pp tz.to_s
}
結果
"(GMT-12:00) International Date Line West"
"(GMT-11:00) American Samoa"
"(GMT-11:00) Midway Island"
"(GMT-10:00) Hawaii"
・・・
# 各都市の名称と時差
・・・
"(GMT+13:00) Nuku'alofa"
"(GMT+13:00) Samoa"
"(GMT+13:00) Tokelau Is."
手順2
cmd + F
で"Hawaii"と検索
結果
"(GMT-10:00) Hawaii"
GMT(世界標準時)-10:00
と表示されていますね。
これは世界標準時より-10時間の時差があることを示しています。
方法1と同じ結果が取得できましたね。
ここからはハワイと日本の時差を求めていきます。
cmd + F
で"Hawaii"と検索すると以下の結果が返ってきます。
"(GMT+09:00) Tokyo"
日本は(GMT+09:00)
と表示されているので世界標準時より+9時間の時差があります。
ハワイと日本の時差は、下のイメージで簡単に計算できます。
"Hawaii" <---- GMT ----> "Tokyo"
-10時間 +9時間
ハワイと日本の時差は19時間と求められましたね。
そして、"Tokyo"の方が"Hawaii"より右にあるので、日本の方が時間が進んでいると理解できますね。
ちなみにこの方法だと151の地域の時差を一括取得できます。 便利ですね
1 "(GMT-12:00) International Date Line West"
2 "(GMT-11:00) American Samoa"
3 "(GMT-11:00) Midway Island"
4 "(GMT-10:00) Hawaii"
・・・
# 各都市の名称と時差
・・・
149 "(GMT+13:00) Nuku'alofa"
150 "(GMT+13:00) Samoa"
151 "(GMT+13:00) Tokelau Is."
まとめ
方法1
メリット: 時差だけでなく現在時刻も表示してくれる
デメリット: config/application.rb
を修正するのが面倒
方法2
メリット: 方法1と違い、config/application.rb
をいじる必要がない
151の地域の時差が一覧で表示される
デメリット:現在時刻が表示されない
最後に問題
上記の方法を使って
ロシアのヤクーツク("Yakutsk")という地域と日本("Tokyo")
の時差を求めてみましょう。
求められた人には
離れていても同じ時間に生きていることの神秘さが伝わったと思います。
記事は以上です。では、さようなら