モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

ISO 8601 の日時に関すること(間違いがあるかも)

 ISO 8601 について自分なりにまとめていく

概要

  1. ISO 8601 とは
  2. 各部
  3. まとめ

1. ISO 8601 とは

 日付と時刻に関する国際規格。最新版は ISO 8601:2004。拡張書式を含めるとかなりの方法の記述ができる。

 以下はそれぞれの部について説明していく。まず ISO 8601:2004 は次のような書式で構成される。

 YYYYMMDD"T"hhmmss"Z"

 なお、ダブルクオーテーションで囲ったものは文字列という意味である。

 今の日時を表すと [20140201T091727+0900] である。基本書式の Z は UTC のことである。一般的に Web では YYYY"-"MM"-"DD"T"hh":"mm":"ss"+09:00" が見られると思うが、これは「W3C-DTF」であり、ISO 8601:1988 のサブセット版と思っていいだろう。

 ここでは“厳密な” ISO 8601:2004 で説明していきたいが、本規格の仕様書を買ったわけではないので、厳密な説明にはならないかもしれない。Web から断片を組み合わせて再整理したと思ってもらってもいい。ただ、日本語でまとまっている資料が少ないから、改めてまとめてみようと思った次第である。

 なお、このエントリーは以下のサイトを大いに参考にさせてもらった。
ISO 8601 - Calender Wiki: http://calendars.wikia.com/wiki/ISO_8601

2. 各部

2.1. 日付部

 日付部は以下の 7 つの形式がある。

  • YYYYMMDD または YYYY"-"MM"-"DD (年/月/日)
  • YYYY"-"MM (YYYYMM はダメ) (年/月)
  • YYYY ()
  • CC (年代)
  • YYYY"W"wwD または YYYY"-W"ww"-"D (年/週/曜日)
  • YYYY"W"ww または YYYY"-W"ww (年/週)
  • YYYYDDD または YYYY"-"DDD (年/年間日)

注意事項としては YYYY が 0000 のときは紀元前 1 年、-0001 は紀元前 2 年である (といっても処理系の関係上 1970 年以前は処理できなかったりするかもしれない)。

2.2. 時刻部

 時刻部は以下の 3 つの書式がある。

  • hhmmss または hh":"mm":"ss (時/分/秒)
  • hhmm または hh":"mm (時/分)
  • hh ()

また、時刻部に対しては小数点以下の表記が認められる。小数点としては「,」と「.」が使用可能だが、カンマのほうが好ましい。

  • hhmmss","S または hh":"mm":"ss","S (時/分/秒)
  • hhmm","S または hh":"mm","S (時/分)
  • hh","S ()

なお、時刻表記に関して 0 時と 24 時の 2 通りの記述ができるが、0 時は“日のはじめ”、24 時は“日の終わり”として扱う。

2.3. タイムゾーン

 タイムゾーン部は以下の 4 つの書式がある。

  • Z (UTC)
  • ±hhmmss または ±hh":"mm":"ss (時/分/秒)
  • ±hhmm または ±hh":"mm (時/分)
  • ±hh ()

2.4. 接合に関して

 日付部と時刻部の接合には T を用いる。

2.5. その他

 ハイフンやコロンの入ったものは拡張書式である。基本書式は含まれていないものである。

 Duration や Time interval の表記もあるがここはある日時の「点」に対して説明するので割愛。

3. まとめ

 これらを組み合わせると多数の方法で実装できることが分かると思う。実際、5 桁の年が定義されていたりするらしいが、まあ私が死んでおよそ 8000 年ぐらいあると思うので大丈夫だと思う。むしろ 8000 年生きるテクノロジーができていてもそれは絶望に近い気が…

 全体的に整理してみたよ! ってお話。日時の扱いって意外にめんどくさいなぁ、って思ってしまいます。めんどくさいけども、一度実装しちゃえばいろいろなことに転用できるので、やるならとことんやっちゃいましょう!

 あとミスってるところあったらコメントしていただければ嬉しいかと。では~