HTTP::Date

Hippo2000 (2000/7/28)

HTTP::Dateモジュールなのです。

作者はGisle Aasさんです。メールで許可をいただきました。


目次


名前

HTTP::Date - 日付変換ルーチン


概要

 use HTTP::Date;
 $string = time2str($time);    # GMT ASCII時刻にフォーマット
 $time = str2time($string);    # ASCII日付をマシン時刻に変換

説明

このモジュールはHTTPプロトコルによって使われる日付フォーマットを扱う関数を(そしてそれ以上のものを)提供します。デフォルトでは最初の2つの関数、time2str()とstr2time()だけがエクスポートされます。

time2str( [$time] )
time2str()関数はマシン時刻(始まりからの秒数)を文字列に変換します。もしこの関数が引数無しで呼ばれれば、現在時刻を使います。

文字列は、HTTPプロトコルのために提出されているフォーマットで返されます。これは固定長で、RFC 1123で定義されているサブセット、世界時刻(GMT)で表されます。このフォーマットでのタイムスタンプの例を以下に示します:

   Sun, 06 Nov 1994 08:49:37 GMT
str2time( $str [, $zone] )
str2time()関数は文字列をマシン時刻に変換します。もし$strのフォーマットが理解できなければ、あるいは時刻が表すことが出来る範囲を越えていれば、undefを返します。理解される時刻フォーマットはparse_date()と同じです。

この関数は、日付を変換するときに使われるデフォルトの時間帯を指定するオプションの2番目の引数も取ることが出来ます。日付文字列自身に時間帯が見つかれば、このパラメータは無視されます。もしこのパラメータがなく、日付文字列のフォーマットに時間帯の指定が入っていなければ、ローカル時間帯が想定されます。

時間帯が"GMT"でも("-800"や"+0100"のような)数値でもなければ、日付を理解するためにTime::Time::Zoneモジュールがインストールさてていなければいけません。

parse_date( $str )
この関数は日付文字列を解析しようとし、(未定義かもしれない)時間帯指定子に従って、数値のリストとして返します、($year, $month, $day, $hour, $min, $sec, $tz)。返される$yearは1900を引かれない数値を持ち、$monthは1から始まります。

スカラ・コンテキストでは"YYYY-MM-DD hh:mm:ss TZ"というフォーマットの文字列に書きこまれ、返されます:

日付が理解できなければ、空のリストが返されます。

この関数は以下のフォーマットを解析することができます:

 "Wed, 09 Feb 1994 22:23:32 GMT"       -- HTTP フォーマット
 "Thu Feb  3 17:03:55 GMT 1994"        -- ctime(3) フォーマット
 "Thu Feb  3 00:00:00 1994",           -- ANSI C asctime() フォーマット
 "Tuesday, 08-Feb-94 14:15:29 GMT"     -- old rfc850 HTTP フォーマット
 "Tuesday, 08-Feb-1994 14:15:29 GMT"   -- 崩れた rfc850 HTTP フォーマット
 "03/Feb/1994:17:03:55 -0700"   -- 一般的なログファイル・フォーマット
 "09 Feb 1994 22:23:32 GMT"     -- HTTP フォーマット(曜日無し)
 "08-Feb-94 14:15:29 GMT"       -- rfc850 フォーマット (曜日無し)
 "08-Feb-1994 14:15:29 GMT"     -- 崩れたrfc850 フォーマット (フォーマット)
 "1994-02-03 14:15:29 -0100"    -- ISO 8601 フォーマット
 "1994-02-03 14:15:29"          -- 時間帯(zone)はオプション
 "1994-02-03"                   -- 日付のみ
 "1994-02-03T14:15:29"          -- セパレータとしてTを使う
 "19940203T141529Z"             -- ISO 8601 コンパクト・フォーマット
 "19940203"                     -- 日付のみ
 "08-Feb-94"         -- 古いrfc850 HTTP フォーマット    (曜日無し、時刻無し)
 "08-Feb-1994"       -- 崩れた rfc850 HTTP フォーマット (曜日無し、時刻無し)
 "09 Feb 1994"       -- 提案された新しいHTTP フォーマット  (曜日無し、時刻無し)
 "03/Feb/1994"       -- 一般的なログファイル・フォーマット     (時刻無し、オフセットなし)
 "Feb  3  1994"      -- Unix 'ls -l' フォーマット
 "Feb  3 17:03"      -- Unix 'ls -l' フォーマット
 "11-15-96  03:52PM" -- Windows 'dir' フォーマット

パーサは前や後ろについた空白を無視します。またほとんどのフォーマットで秒を指定しなかったり、月を数字で指定することも許します。

もし年(year)がなければ、日付は、現在の月よりで最初にマッチした日付であると想定します。年が2桁だけで指定されれば、parse_date()はその年が、現在の時刻に最も近くなるような世紀を選びます。

time2iso( [$time] )
time2str()と同じ。しかしローカル時間帯での時刻を表す、"YYYY-MM-DD hh:mm:ss"でフォーマットされた文字列を返します。
time2isoz( [$time] )
time2str()と同じ。しかし世界時間を表す、"YYYY-MM-DD hh:mm:ssZ"でフォーマットされた文字列を返します。

参考資料

perlfunc, Time::Zone


著作権(COPYRIGHT)

(原文のまま)

Copyright 1995-1999, Gisle Aas

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


ホーム Perlの小技 HTTP

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。