在 Perl 中转换包含时区的时间戳

问题描述 投票:0回答:1

我需要将以下包含 ms 和时区的时间戳转换为 yyyy-mm-dd 格式:

use Time::Piece;
my $created = "2024-07-02T11:20:11.000+0200";
my $test2 = Time::Piece->strptime($created,"%Y%m%dT%H:%M:%S.%z")->strftime("%Y-%m-%d");

但我收到错误:

Error parsing time at /usr/local/lib/perl5/5.18.1/x86_64-linux/Time/Piece.pm line 469.

有人能告诉我正确的方法吗?

perl
1个回答
0
投票

您的 strptime 格式和您的输入之间存在一些不匹配。您的开头有

%Y%m%d
,它会匹配
20240702
,但您的输入有
2024-07-02
。最后有
%S.%z
,它会匹配
11.+0200
,但您的输入有
11.000+0200

要修复第一个问题,只需在格式中添加破折号即可。

为了解决第二个问题,Time::Piece 不理解秒的小数部分。如果你能保证你收到的字符串总是在整秒上,你可以使用

%Y-%m-%dT%H:%M:%S.000%z
的格式。

如果您不能保证分数始终为

.000
,您可以使用功能更强大的模块(DateTime::Format::Strptime 将支持
%Y-%m-%dT%H:%M:%S.%3N%z
),或者简单地认识到最后,代码你写的相当于
substr $created, 0, 10

© www.soinside.com 2019 - 2024. All rights reserved.