Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl由localtime生成的日期不正确_Perl - Fatal编程技术网

Perl由localtime生成的日期不正确

Perl由localtime生成的日期不正确,perl,Perl,今天,我发现下面的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,

今天,我发现下面的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开始一样

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表示一月,11表示十二月


您可以根据以下文档检查正确的

$mday
是一个月中的一天,
$mon
是一个月,范围为
0..11
,其中0表示一月,11表示十二月。这样可以很容易地从列表中获取月份名称

但是,为了简化您的目标,我建议您使用:

产出:

2014-08-13-23-42-56

您可能想要
POSIX::strftime

use POSIX qw( strftime );

print strftime "%Y-%m-%d-%H-%M-%S", localtime;

哪里错了?是这个月吗?因为如果是,它是正确的(月份是0..11,而不是1..12,请参阅)。当函数返回一个您怀疑是错误的值时,最明显的下一步是阅读文档?可能是
use POSIX qw( strftime );

print strftime "%Y-%m-%d-%H-%M-%S", localtime;