タイムゾーン(timezoneパッケージ)
timezoneパッケージで、都市ごとに違う時刻と夏時間を扱いましょう。
11章の【日時】はコンピューターに合わせたタイムゾーンしか使えません。ソウルの時刻をニューヨークの時刻に変えたり、夏時間のある都市の曜日を調べたりするには、タイムゾーンを自分で選ぶ必要があります。そのときに使うのがtimezoneパッケージです。Hanaランタイムに一緒に入っていて、タイムゾーンのデータ(IANAタイムゾーンデータベース)がパッケージの中にあるので、コンピューターに別途インストールするものはありません。ただしブラウザには入っていないので、このドキュメントの実行ボタンでは使えません。
【日時】と同じように【timezone】から〈道具〉を持ってこようで持ってきます。時刻は【日時】と同じUnix秒(数字)で、書式はYYYY MM DD HH mm ssがそれぞれ年・月・日・時・分・秒を表す文字列です。
| 道具 | できること |
|---|---|
〈時間帯書式〉(時刻, 書式, 時間帯) |
そのタイムゾーンの時計で、時刻を文字列に書きます |
〈時間帯読み取り〉(文字列, 書式, 時間帯) |
そのタイムゾーンの時計で書かれた文字列を、時刻として読み取ります |
〈時間帯曜日〉(時刻, 時間帯) |
そのタイムゾーンのカレンダーで曜日を教えます(月曜日1~日曜日7) |
〈時間帯オフセット〉(時刻, 時間帯) |
その時刻にタイムゾーンがUTCより何秒進んでいるかを教えます(ソウルは32400) |
タイムゾーンは「Asia/Seoul」、「America/New_York」のようなIANA名か、「UTC」、または「+09:00」・「-0530」のような固定オフセットです。コンピューターのタイムゾーンは選べません。どのコンピューターで実行しても同じ結果になるようにするためです。
【timezone】から〈時間帯書式〉を持ってこよう
【timezone】から〈時間帯曜日〉を持ってこよう
『時刻』を【数字】の1000000000にしよう
〈時間帯書式〉(『時刻』, 「YYYY-MM-DD HH:mm」, 「Asia/Seoul」)を出力しよう
〈時間帯書式〉(『時刻』, 「YYYY-MM-DD HH:mm」, 「America/New_York」)を出力しよう
〈時間帯曜日〉(『時刻』, 「America/New_York」)を出力しよう
同じ瞬間が、ソウルでは2001-09-09 10:46、ニューヨークでは2001-09-08 21:46で、ニューヨークはまだ土曜日なので曜日は6になります。夏時間もデータに入っているので、ニューヨークのオフセットは夏に-14400、冬に-18000です。昔の日付も、そのときの規則どおりに計算します。
【timezone】から〈時間帯読み取り〉を持ってこよう
【timezone】から〈時間帯オフセット〉を持ってこよう
〈時間帯読み取り〉(「2024-07-01 12:00:00」, 「YYYY-MM-DD HH:mm:ss」, 「Asia/Seoul」)を出力しよう
〈時間帯オフセット〉(〈時間帯読み取り〉(「2024-07-01 12:00:00」, 「YYYY-MM-DD HH:mm:ss」, 「America/New_York」), 「America/New_York」)を出力しよう
時計が飛んだり戻ったりするとき
夏時間が始まる日は、時計が1時間飛ぶので、その間の時刻は存在しません。ニューヨークの2024-03-10 02:30:00がそうです。このような文字列を読み取ろうとするとエラーになります。反対に夏時間が終わる日は、時計が1時間戻るので、同じ時刻が2回あります(2024-11-03 01:30:00)。このときは早い方を返します。
知っておくと便利なこと
- タイムゾーン名を間違えたり(
「Asia/Seol」)、空の文字列や「Local」を使ったりするとエラーになります。 - 存在しない日付(
2024-02-30)や、書式に合わない文字列を読み取ろうとするとエラーになります。 - プログラムを実行ファイルにまとめても、このパッケージは一緒に入るので、まとめたプログラムでもタイムゾーン名をそのまま使えます。