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" ); #英語表記を確実にする
を実行しておきます。