[3] ANSI C の asctime()
の形式です。
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
)
ですが、それ以外で使われる場合は一般に出力した機械の地方時でしょう。
[15] Perlモジュール HTTP::Date
には、 asctime 形式の時刻を、動作中の計算機の現地時間で表されるものとして処理する不具合あるいは仕様があります。
a timestamp indicating the UTC date and time when the message was originally received, conformant with the syntax of the traditional UNIX 'ctime' output sans timezone (note that the use of UTC precludes the need for a timezone indicator);
[3] 2002-12-19 (木) 20:59 1970年1月1日: ABNF では
<">...<">
になっているので大文字・小文字を区別しないとしていますが、
生成側は書かれている通り (1文字目だけ大文字)
にしないと、解釈できない糞実装があるかもしれません。
[4] Perl では、 gmtime
や localtime
の scalar
文脈での値がこの形式になります。
[5] 新しい HTTP メッセージを出力する時には、
asctime
形式ではなく RFC 1123の日付形式の
HTTP 版を使うことになっています。
[6] Apache はCGIスクリプトの出力が asctime
のとき、 Last-Modified
欄など幾つかの欄は勝手に修正してくれますが、
Expires
などでは素通しします。
鯖の修正機能には頼らずにちゃんと最初から RFC 2822
形式で出力しておくのがいいでしょう。