asctime形式

asctime形式

[3] ANSI Casctime() の形式です。 HTTPの日付形式にも含まれています。 RFC 1945 によると次のように定義されます。

  asctime-date   = wkday SP date3 SP time SP 4DIGIT
  date3          = month SP ( 2DIGIT | ( SP 1DIGIT ))
                          ; month day (e.g., Jun  2)
  time           = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                          ; 00:00:00 - 23:59:59
  wkday          = "Mon" | "Tue" | "Wed"
                 | "Thu" | "Fri" | "Sat" | "Sun"
  month          = "Jan" | "Feb" | "Mar" | "Apr"
                 | "May" | "Jun" | "Jul" | "Aug"
                 | "Sep" | "Oct" | "Nov" | "Dec"

固定長で、が1桁の時は間隔 (SP) を補充します。 (時分秒が1桁の時は0埋めします。)

時間帯

[1] この日付形式には時間帯の欄がありません。 HTTP で使われる場合は定義により必ず GMT (+0000) ですが、それ以外で使われる場合は一般に出力した機械の地方時でしょう。

[2] 主に >>1 の理由から、この形式を情報交換用に使用するのはふさわしくないでしょう。

実装

[15] Perlモジュール HTTP::Date には、 asctime 形式の時刻を、動作中の計算機の現地時間で表されるものとして処理する不具合あるいは仕様があります。

メモ

[3] 2002-12-19 (木) 20:59 1970年1月1日: ABNF では <">...<"> になっているので大文字・小文字を区別しないとしていますが、 生成側は書かれている通り (1文字目だけ大文字) にしないと、解釈できない糞実装があるかもしれません。

[4] Perl では、 gmtimelocaltimescalar 文脈での値がこの形式になります。

[5] 新しい HTTP メッセージを出力する時には、 asctime 形式ではなく RFC 1123の日付形式の HTTP 版を使うことになっています。

[6] ApacheCGIスクリプトの出力が asctime のとき、 Last-Modified 欄など幾つかの欄は勝手に修正してくれますが、 Expires などでは素通しします。 鯖の修正機能には頼らずにちゃんと最初から RFC 2822 形式で出力しておくのがいいでしょう。