てっきりHTML5のtime要素のdatetime属性などで使われる日付と時刻のフォーマットW3CDTFだと思い込んでいたんだけど、違った。ISO 8601というわけでも、W3CDTFのようにそのサブセットというわけでもないので、パースする時はそこそこ気をつける必要がありそう。知らなければ幸せだったような気がしないでもない。

日付けと時刻の間のT

A "T" (U+0054) character or a U+0020 SPACE character

Tの代わりに半角スペースでも良い。ISO 8601では許可されないので、ISO 8601のパーサーではエラーが起こる可能性が高い。

タイムゾーンの:

Optionally, a ":" (U+003A) character

コロンは省略可能になっている。これはISO 8601と同じ。Nu Validatorとかは非対応なのでエラーになる。


Tの代わりに半角スペースを使えるのは書きやすいし扱いやすいんだけど、そのおかげでISO 8601との互換性が失われているのが惜しい。W3CDTFは適切なHTML5の日付と時刻のフォーマットではあるので、吐く方はW3DTFで吐いてやれば安全そう。読む方は上記二点に気をつけてW3CDTFっぽく整形してやるのが一番手軽そう。最初の空白をTに置換して、最後が数字四桁と+/-ならコロン挟む……とか考えて嫌になってきた。