我需要将以下包含 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.
有人能告诉我正确的方法吗?
您的 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
。