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

Why does strptime from Time::Piece not parse my format?

我的同事(已离开公司)写了一堆脚本,包括批处理和 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”(代表四月三日(欧洲日期格式)),Time::Piece实现似乎无法理解:

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

我可以使用 Time::Piece Perl 实现可以理解的格式?

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

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

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

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

的定义