我已经查看了很多其他类似的线程,但大多数都与格式化当前系统时间有关,就像大多数在线的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";
答案 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