Perl localtime生成的错误日期

时间:2014-08-14 05:48:31

标签: 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, $day, $hour, $min, $sec;
}

3 个答案:

答案 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;