Rails で W3C-DTF

このサイトによれば、W3C-DTF とは、「1997年9月に W3C の会員企業である Reuters Limited が W3C に提出した ISO 8601の日付形式のプロファイル」で、正確には W3C の正式規格ではないとのこと*1。しかし RSS 方面では幅を利かせているらしく、この validatorは日付の形式が違うと文句をのたまう。

Ruby でお手軽に W3C-DTF 形式の日付を出してくれるソースコードをネットで探していたのだが、見つからなかったので自作してみた・・・と書きかけたのだが、実は Rails が Time クラスを拡張していることを発見。 訂正:moro さんにご指摘いただきました。実は Ruby の time ライブラリでの拡張だそうです。謹んで訂正します。

Time.now.iso8601
# => "2008-07-22T14:20:00+09:00"

で OK ぽい。iso 8601 とは書いてあるが、実際には W3C-DTF みたいである。

いちおう悔し紛れにW3C-DTF の仕様書のハイライトをここに掲げてみる。

   Year:
      YYYY (eg 1997)
   Year and month:
      YYYY-MM (eg 1997-07)
   Complete date:
      YYYY-MM-DD (eg 1997-07-16)
   Complete date plus hours and minutes:
      YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
   Complete date plus hours, minutes and seconds:
      YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
   Complete date plus hours, minutes, seconds and a decimal fraction of a
second
      YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)

where:

     YYYY = four-digit year
     MM   = two-digit month (01=January, etc.)
     DD   = two-digit day of month (01 through 31)
     hh   = two digits of hour (00 through 23) (am/pm NOT allowed)
     mm   = two digits of minute (00 through 59)
     ss   = two digits of second (00 through 59)
     s    = one or more digits representing a decimal fraction of a second
     TZD  = time zone designator (Z or +hh:mm or -hh:mm)

*1:これは ISO 8601 という日付に関する仕様のサブセットらしい。元があまりに柔軟性が高すぎて混乱するから、普通に必要なものだけに限定しようよ、という話らしい