ローカルタイム(localtime)を日時表記にするPerlコード

localtime を様々な文字列表記にするコードをご紹介します。

YYYY-MM-DD HH:MM:SS

@time = localtime;
$datetime= sprintf("%04d-%02d-%02d %02d:%02d:%02d", $time[5]+1900, $time[4]+1, $time[3], $time[2], $time[1], $time[0]);

YYYY-MM-DD

@time = localtime;
$date = sprintf("%04d-%02d-%02d", $time[5]+1900, $time[4]+1, $time[3]);

メールヘッダのDateの形式

Tue, 06 May 2003 00:50:57 +0900
など、曜日や月の英語名がある場合でも、POSIX::strftime 関数を使えば、曜日名や月名の配列を作成しなくて済みます。

use POSIX;
$datestr = POSIX::strftime( "%a, %d %b %Y %H:%M:%S +0900", localtime(time));

※ この例だと、タイムゾーンの表記(「+0900」)を手書きしているので、日本での使用にしか対応していません。

曜日名などが日本語表示になってしまう場合は、 strftime を実行する前に

setlocale( LC_ALL, "C" ); #英語表記を確実にする

を実行しておきます。