てっきり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に置換して、最後が数字四桁と+/-ならコロン挟む……とか考えて嫌になってきた。