はじめに
今回は、GMTたら、UTCたら、JSTたら、プログラムを触っていると必ず出てくる日時の概念についてまとめてみようと思います。
何となく理解してしまっている部分があるのでこれを機会にまとめていきたいと思います。
GMT (Greenwich Mean Time)
かつて、世界の標準時として使用されていた時間です。
日本語では「グリニッジ標準時」と呼ばれます。
天体観測に基づいているようです。
UTC (Coordinated Universal Time)
1982 年から GMT に変わり採用されてものです。
日本語では「協定世界時」と呼ばれます。
また、今の世界で標準時として使用されている時間です。
GMT とは違い、セシウム原子の振動数に基づいているため、 GMT よりも高精度なようです。
実用上の違い
実際の時刻表示では、UTC と GMT はほぼ同じ時刻を示します(多少の誤差はあれど)。
そのため、コンピュータの世界では特にGMTとUTCの違いを気にする必要はなさそうです。
JST (Japan Standard Time)
日本語では「日本標準時」と呼ばれます。
JST は UTC に9時間足した値です。
UTC+9
や UTC+09:00
などと表されます。GMT+9
と表される場合もありますが、上述したように UTC を用いたものと同義だと考えても大丈夫です。
例えば、UTC で 2:57 であれば、JSTは 11:57 となります。
UNIX時間 (エポック秒)
これは時間の表現方法です。
どのような表現方法かというと、
UTC で 1970 年 1 月 1 日 00:00:00 を基準にして、そこからの経過秒数で日時を表現します。(この基準時間を UNIX エポックと言います。)
エポック秒 (epoch seconds) とも呼ばれるようです。
1671294278
というような10桁の整数で表現されます。エポックミリ秒の場合は13桁になります。
あくまで UTC であるということには注意が必要です。
UNIX時間を日本時間に変える方法をざっくりで説明すると以下のようになりまs。
- UNIX エポックに UNIX 時間を足す
- 上記の結果に9時間を足す
ISO8601
日付と時刻を表現する国際標準規格のことです。
よくある形式には以下のような形式があります。
- 年月日と時分秒を合わせた形式:
YYYY-MM-DDThh:mm:ss
- タイムゾーンを含めることが可能:
YYYY-MM-DDThh:mm:ss+hh:mm
- UTC時刻を表す場合は末尾に ‘Z’ をつけます:
YYYY-MM-DDThh:mm:ssZ
タイムゾーン (time zone)
地域ごとの時差を表す概念のことです。
日本は UTC+9
で、韓国や北朝鮮、インドネシアなどが同じ時間帯のようです。
Asia/Tokyo
といったようなものもコンピュータの世界では出てくると思いますが、これは IANA (Internet Assigned Numbers Authority) というところが、世界中のタイムゾーン情報を統一的に管理しています。
Time Zone Database (tz database) に情報が収録されています。
Asia/Tokyo
というように 大陸/都市 という命名規則が採用されています。
タイムゾーン情報を持つ識別子ということができそうです。
まとめ
いろいろと小難しい言葉が多くありましたが、最も重要なのは GMT と UTC は日本時間より 9 時間前の時間であるということ、JST を基準に見るなら、JST は GMT と UTC の 9 時間後の時間であるということかなと思いました。
曖昧だった知識が少し深まった気がします。
参考文献