Date関数

「#--Date」で検索すると確実にヒットします。

この関数は、RSS1.0およびRSS2.0で使用されている日付フォーマットを整形します。

具体的には、「2009-06-11T14:55:26+09:00」や「Thu, 11 Jun 2009 14:55:26 +0900」といった日付フォーマットを…。

「2009/06/11 14:55:26」のようにわれわれが見やすい形に整形します。

引数は、整形したい日付フォーマットで書かれた文字列、戻り値は見やすく整形された日付フォーマットの文字列です。

それでは、この関数の流れを見てみましょう。

日付の整形

この関数では、HTTP::Dateモジュールを使用しているので、いろいろな世界標準日付フォーマットを日本で使える秒に直すことができます。

秒に直した後は、localtime関数で適切な日付パーツを求めて整形してから返します。

なのでまずは、HTTP::Date::str2time関数に、受け取った文字列を渡し現在の秒数を取得します。

eval {
$time = HTTP::Date::str2time($date_string, $timezone);
};
if ($@) {
return $date_string;
} else {
...
...
}

直接HTTP::Date::str2time関数を呼び出してもよいのですが、失敗する可能性を考慮し、eval関数で囲んでいます。

もし失敗した場合は、変数「$@」にエラーメッセージが格納されるのでif文が成立します。

成功した場合は、else以降つまり、以下の命令が実行されます。

my ($second,$minute,$hour,$day,$month,$year) = (localtime($time))[0..5];
return sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$month+1,$day,$hour,$minute,$second);

取得した秒からlocaltime関数で適切な日付パーツにし、sprintf関数で整形した値を返しています。