ISO 8601 の時刻表記
ここでは ISO 8601 に従う時刻の記録について説明します。
時刻記録の動機
コンピュータシステム上で何か処理を行った際、通常、処理を行ったか時刻を記録しておきます。
ユーザー側の業務規則として時刻の記録が必要な場合が多いだけでなく、システム屋の立場からも正しく記録しておいた方が、 トラブルシューティング等で何かと役に立ちますので、少なくとも主要な処理ではタイムスタンプは取っておくべきです。
さて、時刻とひとくちにいっても、今どきサーバーはいろんな場所に分散されていることは珍しくないので、 ひとつの取引に関する情報を処理するシステムのタイムゾーンがまちまちであることも多いです。
システムの規模が比較的小さく、ひとつの取引に絡むシステムが全て同一タイムゾーンに存在している、ということが明白でない限り、 時刻の情報にはタイムゾーンの情報が必要です。あるいは、仕様として統一して UTC で記録します。
特に EDI などでは、ドキュメント (データ) は一人歩きするのが前提ですから、 時刻は国際標準である ISO8601 に従うフォーマットで記録するのが普通です。
というわけで、この資料では ISO8601 フォーマットのうち、よく使われる (= 必ず意味を覚えておきたい) フォーマットについて説明します。
ISO8601 ~ 日付・時刻の表記
日付・時刻の表記でよく出てくるのは、国際標準 ISO 8601 に従う表記です。
その中でもいろんなバリエーションがありますが、ここではよくお目にかかる表記について書いておきます。
日付 : YYYY-MM-DD
日付は年・月・日の順番で記載し、区切り文字はハイフンです。
年月日は 4 桁、2 桁、2 桁で記載し、4 月、 1 日など、1 桁で済む場合は左から 0 で埋めます。(例: 2011年4月1日は 2011-04-01)
ハイフンは省略できます。 (例: 2011年4月1日は 20110401)
時刻:hh:mm:ss (hh は 24時間表記) が基本
時刻は24時間表記で、時間、分、秒を hh:mm:ss で表記します。
それぞれの部分が 2 桁で必要に応じて 0 埋めします。
ミリ秒を追加する場合は hh:mm:ss.sss、あるいは秒を省略する場合は hh:mm となります。
区切り文字のコロンも省略できます。
省略可能といっても、無駄に可読性を落とすことにメリットがあるか、考えてからにしましょう。通常あまり省略されません。
日付と時刻の区切り文字は T を使います。
従って、2011年4月1日午後3時45分は "2011-04-01T15:45" になります。
タイムゾーン:±hh:mm 等。UTC なら Z も
タイムゾーンは UTC からの時差を、時刻に続けて ±hhmm または ±hh:mm または ±hh で書きます。
直感的にわかりやすく、迷うことはあまりないと思いますが、どの表記もよくみかけます。
(例) 日本時間の 2011年4月1日午後3時45分なら、日本は UTC から 9 時間進んでいますので、2011-04-01T15:45+09:00 のように書きます。 これで「UTC から 9 時間プラスのタイムゾーンでの 2011年4月1日午後3時45分ですよ」と書いたことになります。
UTC の場合は +00:00、+0000、+00 または Z を添えます。
例えば UTC 時刻の 2011年4月1日午後3時45分なら、2011-04-01T15:45+0000 とか 2011-04-01T15:45Z と書きます。
その他にも省略したり、週の表記があったりするので、ISO8601 にはバリエーションはありますが、 ここではよく使われる最低限の時刻表記ルールについて記載しました。