W3Cによる日時表記
記載日:2007/06/30
日付時刻の文字列表現とデータ表現
時刻を除く日付だけを考えても、その文字列表現は、 2007/06/30 や 2007-06-30、 2007.6.30、 20070630、 2007年6月30日、June 30, 2007 と様々です。日付を表現したいだけならどれを使用するか決めてしまえば問題ないと思いますが、プログラムで日時を扱う場合、3日後の日付とか、ある日以降の日付というように演算をともなう属性であるため、日付型(Javaで言えばjava.util.Dateなど)というデータ表現が用意されている場合がほとんどです。プログラム中で日付を扱う上では、表示のための文字列表現と、演算のためのデータ表現という2面性の意識が不可欠です。
文字列表現とデータ表現の相互変換
相互変換するうえでの基準の必要性
プログラム中で日付を持っていてそれを表示したいだけなら、内部でデータ表現を使用して表示の際にだけ適切な文字列表現に変更すればなんら問題は発生しないと思います。しかし実際にはそう簡単にはいかず、画面から入力された日時や XML, CSV 等のファイルに記述された日時を入力として処理するケースも多く、その場合には日付の文字列表現からデータ表現への変換も必要となってきます。
文字列表現からデータ表現への変換はかなり厄介です。それは日付の文字列表現が文化や好みなどの要因で一意に決めることができないからです。多種多様な文字列表現をデータ表現へ変換するというのは現実的に無理な話なので、あらかじめなんらかの基準を設けてプログラム中で扱える文字列表現を制限してやる必要があります。
W3Cでの日付時刻基準
これら日付時刻を表現するうえで独自基準を設けてもいいのですが、どうせ決めるなら一般的に普及している基準に沿った方が、説明もしやすいし納得もされやすいでしょう。日付時刻の表現は国際的な標準規格 ISO 8601 でいくつも定められていますが、WWW で利用される技術の標準化を進める団体である W3C では、ISO 8601 を簡易化した日付時刻表現を定義しています。仕様を簡略化することにより日付時刻を扱うプログラムが複雑になりにくいというメリットがあります。標準規格を採用するという理由からも、ウェブ関連のプログラムで日付時刻変換を行う場合 W3C の日付形式をサポートするのがベストでしょう。
W3C 日付形式
国際的な日付表現として、グリニッジ標準時からの時差で表現する形式があります。例えば日本であれば、グリニッジ標準時からの時差は+9時間であるため、 GMT+9:00 の表現になります。 W3C の日付形式もこれにのっとっています。
W3C日付形式を以下にまとめます。表現形式で使用している記号はさらに下の別表にまとめています。"-"と"T"、"."は区切り文字なのでそのまま指定します。
表現したい内容 |
表現形式 |
例 |
例の意味 |
年のみを表現 |
yyyy |
2007 |
2007年 |
年月を表現 |
yyyy-mm |
2007-06 |
2007年6月 |
日付表現 |
yyyy-mm-dd |
2007-06-30 |
2007年6月30日 |
日付と時分表現 |
yyyy-mm-ddThh24:mi(GMTからの時差) |
2007-06-30T21:10+09:00 |
日本時間で2007年6月30日21時10分 |
2007-06-30T12:10Z |
グリニッジ標準時で上記の日時と時分を表現 |
日付時刻表現 |
yyyy-mm-ddThh24:mi:ss(GMTからの時差) |
2007-06-30T21:10:53+09:00 |
日本時間で2007年6月30日21時10分53秒 |
2007-06-30T12:10:53Z |
グリニッジ標準時で上記の日時時刻を表現 |
日付時刻(少数秒)表現 |
yyyy-mm-ddThh24:mi:ss.ff[n](GMTからの時差) |
2007-06-30T21:10:53.125+09:00 |
日本時間で2007年6月30日21時10分53.125秒 |
2007-06-30T12:10:53.125Z |
グリニッジ標準時で上記の日付時刻(少数秒)を表現 |
表現形式で使用している記号についてもまとめます。
表現形式中で使用している記号 |
意味 |
指定方法 |
yyyy |
年 |
省略しない4桁の西暦で指定します。 |
mm |
月 |
01~12の範囲で1桁の月であっても2桁で指定します。 |
dd |
日 |
01~31の範囲で、1桁の日であっても2桁で指定します。 |
hh24 |
時 |
00~23の24時間計の範囲で、1桁の時であっても2桁で指定します。 |
mi |
分 |
00~59の範囲で、1桁の分であっても2桁で指定します。 |
ss |
秒 |
00~59の範囲で、1桁の秒であっても2桁で指定します。 |
ff[n] |
小数秒 |
1桁以上の任意の桁数[n]で1秒に満たない小数秒を整数で指定します。 |
(GMTからの時差) |
GMTからの時差 |
各国の時刻を表す場合は、GMTからの時差を「+09:00」、「-03:00」の頭0を省略しない形式で指定します。 |
グリニッジ標準時(実際は協定世界時UMT)を指定する場合は「Z」を指定します。 |
参考文献(関連サイト)