为什么来自Time :: Piece的strptime不能解析我的格式?

时间:2017-04-03 08:51:22

标签: perl datetime strptime

我的同事(已经离开公司)写了一堆脚本,包括批处理和Perl脚本,我正在摆脱区域设置依赖。

在最后一个Perl脚本中,他编写了以下代码:

my $format = "%d.%m.%Y %H:%M";
my $today_converted = Time::Piece->strptime($today, $format) - ONE_HOUR - ONE_HOUR - ONE_HOUR - ONE_HOUR - ONE_HOUR; 

(想法是在特定日期的午夜前五个小时)

$today的值似乎是“03/04/2017”(代表4月3日(欧洲日期格式)),这似乎不被Time :: Piece实现所理解:

Error parsing time at C:/Perl64/lib/Time/Piece.pm line 481.

Time :: Piece Perl实现可以理解哪种格式?

2 个答案:

答案 0 :(得分:5)

在格式中,您有点.作为日期分隔符,但在数据中您有斜杠/。这就是为什么它不解析。它需要完全匹配。

答案 1 :(得分:1)

我认为值得澄清的是strptime()将解析大多数日期和时间格式 - 这就是方法的要点。但是您需要定义要解析的日期字符串的格式。这就是strptime()的第二个参数(在本例中,是您的$format变量)。

格式中使用的字母取自strptime()的每个实现所使用的标准定义列表(及其反向,strftime())。有关可用选项的完整列表,请参阅系统上的man strptime

在您的情况下,格式为%d.%m.%Y %H:%M - 这意味着它将解析时间戳,其中日,月和年以点分隔,后跟空格,小时和分钟用冒号分隔。如果要以不同的格式解析时间戳,则需要更改$format的定义。