Perl Strptime错误

时间:2014-08-05 21:24:31

标签: perl time strptime

我目前正在尝试解析CSV文件中的数据,该文件在第一列中的时间戳如下所示:

07/26/2014 00:23:09

我阅读了Time :: Piece的文档,我已经用它来解析其他类型的时间戳,而且这个时间样式的格式字符串似乎应该是“%D%T”。但是,当我尝试行

$temp_time = Time::Piece->strptime($fields[0], "%D %T");

其中$ fields [0]是包含时间戳的字符串,执行时会收到此类警告:

 garbage at end of string in strptime:  03:19:24 at /usr/local/lib64/perl5/Time/Piece.pm line 469, <$data> line 11933.

任何指针?我也试过“%m /%y /%d%H:%M:%S”,这似乎不起作用。

谢谢!

3 个答案:

答案 0 :(得分:1)

%D格式说明符相当于%m/%d/%y,其中%y(小写'y')是年没有世纪(即0-99) )。你使用的是四位数年份,因此无效。

相反,请使用

my $t = Time::Piece->strptime('07/26/2014 00:23:09', '%m/%d/%Y %T');

(请注意大写%Y

有关格式说明符的详情,请运行man strptime,或查看FreeBSD manpage中链接的Time::Piece documentation

答案 1 :(得分:0)

您的第二个格式字符串的年份位于中间位置。

也许以下内容对您有所帮助:

use strict;
use warnings;

use Time::Piece;

my $str = '07/26/2014 03:19:24';

my $t = Time::Piece->strptime($str, "%m/%d/%Y %H:%M:%S");

print $t->strftime("%a, %d %b %Y"), "\n";

输出:

Sat, 26 Jul 2014

答案 2 :(得分:0)

我尝试使用以下的初始方式:

use strict;
use warnings;
use Time::Piece;

my $time = Time::Piece->strptime(
    "07/26/2014 00:23:09", 
    "%m/%d/%Y %H:%M:%S");
print $time;