我的同事(已经离开公司)写了一堆脚本,包括批处理和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实现可以理解哪种格式?
答案 0 :(得分:5)
在格式中,您有点.
作为日期分隔符,但在数据中您有斜杠/
。这就是为什么它不解析。它需要完全匹配。
答案 1 :(得分:1)
我认为值得澄清的是strptime()
将解析大多数日期和时间格式 - 这就是方法的要点。但是您需要定义要解析的日期字符串的格式。这就是strptime()
的第二个参数(在本例中,是您的$format
变量)。
格式中使用的字母取自strptime()
的每个实现所使用的标准定义列表(及其反向,strftime()
)。有关可用选项的完整列表,请参阅系统上的man strptime
。
在您的情况下,格式为%d.%m.%Y %H:%M
- 这意味着它将解析时间戳,其中日,月和年以点分隔,后跟空格,小时和分钟用冒号分隔。如果要以不同的格式解析时间戳,则需要更改$format
的定义。