格式化输出日期

时间:2013-12-18 18:55:56

标签: perl date

我已经查看了很多其他类似的线程,但大多数都与格式化当前系统时间有关,就像大多数在线的exmaples一样。我正在解析一个日志文件,并有一个我希望以不同格式输出的传入日期。以下是我必须测试的代码:

use Date::Format;

my $formatdate="";

# input date format is mm/dd/yy
my $unformatdate="04/02/13";

#format the date
$formatdate=time2str("%B %e %Y", $unformatdate);
#print the output
print "Unformatted Date is: $unformatdate\n";
print "Formatted date 1 is: $formatdate\n";

这是输出。格式正确,值不是。我假设它是因为time2str()不喜欢输入格式。

Unformatted Date is: 04/02/13
Formatted date 1 is: December 31 1969

我也试过这样的输入:

my $unformatdate="04-020-2013";

3 个答案:

答案 0 :(得分:3)

time2str需要一个unix时间值(自纪元以来的秒数)。你给它一个字符串,它被映射到整数0,因此你回到了纪元的开头。

如果日期格式相同,最简单的方法是使用split删除日,月和年,只需使用sprintf创建所需的字符串即可。

在一般情况下,您实际想要使用的库是Date::Parse

答案 1 :(得分:3)

我更喜欢用Time::Piece进行日期解析,因为它自Perl 5.9以来一直是核心模块:

use Time::Piece;

my $t = Time::Piece->strptime('04/02/13','%D');
print $t->strftime('%B %e %Y');

输出:

April  2 2013

答案 2 :(得分:0)

我做了更多检查,并且:

use Date::Manip::Date;
my $unformatdate="04/02/13";


$date->parse($unformatdate);
print $date->printf("%F\n");

输出:

Tuesday, April 02, 2013