日付と時刻をTで結ぶ方式は普及していない
僕も ISO 8601 形式は大好きなんだけど、 YYYY-MM-DDTHH:MM:SS 形式は思いのほか通用しないので気をつけましょう。
日付と時刻を両方表現したい場合は
2008-05-16T11:25:30+09:00
つまり日付と時刻をTでつなげる。これが世界的スタンダードとしてISO8601とRFC3339に定められた日付と時刻の表現方法。有名どころの言語やらデータベースその他ミドルウェアはすべてこれに沿った表記を解釈し入出力できるようになっている。
JavaScript
とりあえず、JavaScriptではほとんど通用しません。
var timestamp = Date.parse('2008-05-16T11:25:30+09:00');
window.alert(timestamp + ' = ' + new Date(timestamp));
↑のコードを各ブラウザで実行した結果が↓。
- IE 6
- NaN = NaN
- Firefox 2
- NaN = Invalid Date
- Safari 3.1.1
- NaN = Invalid Date
- Opera 9.26
- 1210895340000 = Fri, 16 May 2008 08:49:00 GMT+0900
Operaの結果は謎。
RDBMS
確か、PostgreSQLでは TIMESTAMP型に YYYY-MM-DDTHH:MM:SS 形式は受け付けてもらえません。 [PostgreSQL 8.3.1文書 - 8.5. 日付/時刻データ型]
[コメント及び元記事の追記を受けて追記] PostgreSQLはちゃんと読んでくれるそうです。勘違いでした。
手元にあった MS Access 2003 でも駄目でした。
この二つは、 YYYY-MM-DD HH:MM:SS のように、日付と時刻をTではなくてスペースでつなげれば読んでくれるようです。
結論
ろくに検証もせずに結論付けるのも乱暴ですが、上記のように有名どころでもISO 8601の日付時刻形式 (というより、日付と時刻をTでつなぐ形式) に対応してくれていない言語やDBMSは多いです。僕は ISO 8691 Lover (その証拠に、このブログの日付欄はYYYY-MM-DD形式になっている) なのでいつもあちこちで試していますが、経験的にはあまり通用しません。
世界スタンダードだといっても通用しなければしょうがないですし、 YYYY-MM-DDTHH:MM:SS 形式自体が、数多い ISO 8601 形式の一つでしかないことを考えると、ごり押しはしないほうがいいでしょう。YYYY MM DD HH MM SSの順番と桁数だけ守って、区切り文字などは自由に対応できるようにしておくのが現実的な対応のような気がします。
下手に英語かぶれして 5/7/08 とかやられると殺意を覚えますが。
おまけ
ISOの規格は何かと便利なので、日頃から使う癖をつけておくと役に立ちます。
例えば、便利なところでは ISO 3166-1 (国名コード)、ISO 639 (言語名コード)、ISO 4217 (通貨名コード)など。ここらへんは何も考えずにそのまま使っちゃったほうが楽でしょう。
ISO 3166-2 (地域コード)を使えば、日本の都道府県を表すコードも手に入ったりします。 (例: 東京都 = JP-13)
おもしろいところでは、ISO 5218 (性別コード)なんてものもあります。社会調査などをやるときに使うと便利ですが、馬鹿正直に使うと↓のようなとても寛容な質問フォームになります。
- 性別
- 0. 不明 1. 男性 2. 女性 9. 該当なし
日頃頻繁に使うようなデータは、だいたいISOかJISで規格化されていたりするものなので、一度調べてみるとおもしろいかもしれません。