今天我发现以下perl脚本运行不正确。 目前的实际日期时间是20140814 13:19 但它返回:2014-7-14-13-19-15(月值7比实际值8小1)
我的操作系统:win7
sub GetFileNameDate {
my ($sec,$min,$hour,$day,$month,$yr19,@rest) = localtime;
return sprintf "%s-%s-%s-%02d-%02d-%02d", ($yr19 + 1900), $month, $day, $hour, $min, $sec;
}
答案 0 :(得分:5)
月份值从0开始是不正确的
sub GetFileNameDate {
my ($sec,$min,$hour,$day,$month,$yr19,@rest) = localtime;
return sprintf "%s-%s-%s-%02d-%02d-%02d", ($yr19 + 1900), ($month +1), $day, $hour, $min, $sec;
}
$ month是月份本身,在0..11范围内,0表示1月,11表示12月。
您可以查看manual
答案 1 :(得分:4)
根据localtime
:
$mday
是一个月中的某一天,$mon
范围内的月份0..11
,0表示1月,11表示12月。这样可以很容易地从列表中获取月份名称。
但是,为了简化您的目标,我建议您使用Time::Piece
:
use strict;
use warnings;
use Time::Piece;
sub GetFileNameDate {
return localtime->strftime("%Y-%m-%d-%H-%M-%S");
}
print GetFileNameDate(), "\n";
输出:
2014-08-13-23-42-56
答案 2 :(得分:0)
您是否想要POSIX::strftime
?
use POSIX qw( strftime );
print strftime "%Y-%m-%d-%H-%M-%S", localtime;