英文:
Perl's Mojo::XMLRPC and manipulating Mojo::Date format
问题
我受到启发使用 Mojo::XMLRPC
后阅读了 The Mojolicious Blog - Day 11。我在 Mojo::Date
格式方面遇到了问题。
-
在
encode_xmlrpc
期间,<dateTime.iso8601>
是2023-06-14T19:45:48Z
。我需要它为:20230614T22:45:48+0300
-
在
decode_xmlrpc
期间,当<dateTime.iso8601>
是20230608T12:00:00+0000
时,我遇到错误:
在 strptime 中字符串末尾有垃圾: +0000,位于 /usr/local/opt/perl/lib/perl5/5.36/darwin-thread-multi-2level/Time/Piece.pm 的第 598 行。
也许一个格式标志没有匹配实际输入?位于 /usr/local/opt/perl/lib/perl5/5.36/darwin-thread-multi-2level/Time/Piece.pm 的第 598 行。
编辑:我认为在 XMLRPC.pm
的 $time_format
数组前面缺少 '%H:%M:%S%z'
是我的问题(?)。
我如何指示 Mojo::XMLRPC
(或 Mojo::Date
?)使用所需的 DateTime 格式?
以下是示例代码:
#!/usr/bin/env perl
使用 Mojo::XMLRPC qw[encode_xmlrpc decode_xmlrpc];
使用 Data::Dumper;
我的 $e = encode_xmlrpc(call => TaregtMethod => {originTimeStamp=>Mojo::Date->new(time)});
say STDERR Dumper($e);
我的 $xml = <<'XML';
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>activationDate</name>
<value>
<dateTime.iso8601>20230608T12:00:00+0000</dateTime.iso8601>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
XML
我的 $d = decode_xmlrpc($xml);
say STDERR Dumper($d);
英文:
I was inspired to use Mojo::XMLRPC
after reading The Mojolicious Blog - Day 11. I'm having problems with Mojo::Date
format.
-
During
encode_xmlrpc
,<dateTime.iso8601>
is2023-06-14T19:45:48Z
. Instead, I need it as:20230614T22:45:48+0300
-
During
decode_xmlrpc
, I get an error when<dateTime.iso8601>
is20230608T12:00:00+0000
:
Garbage at end of string in strptime: +0000 at /usr/local/opt/perl/lib/perl5/5.36/darwin-thread-multi-2level/Time/Piece.pm line 598.
Perhaps a format flag did not match the actual input? at /usr/local/opt/perl/lib/perl5/5.36/darwin-thread-multi-2level/Time/Piece.pm line 598.
EDIT: I believe a missing '%H:%M:%S%z'
at the front of $time_format
array in XMLRPC.pm
is my issue (?)
How can I instruct Mojo::XMLRPC
(or Mojo::Date
?) to use the desired DateTime format?
Sample code below:
#!/usr/bin/env perl
use Mojo::XMLRPC qw[encode_xmlrpc decode_xmlrpc];
use Data::Dumper;
my $e = encode_xmlrpc(call => TaregtMethod => {originTimeStamp=>Mojo::Date->new(time)});
say STDERR Dumper($e);
my $xml = <<'XML';
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>activationDate</name>
<value>
<dateTime.iso8601>20230608T12:00:00+0000</dateTime.iso8601>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
XML
my $d = decode_xmlrpc($xml);
say STDERR Dumper($d);
答案1
得分: 2
问题出在另一端。
在 encode_xmlrpc
过程中,<dateTime.iso8601>
是 2023-06-14T19:45:48Z
。相反,我需要它为:20230614T22:45:48+0300
。
这是不可配置的,并且这不是有效的 iso8601 序列化。
在 decode_xmlrpc
过程中,当 <dateTime.iso8601>
是 20230608T12:00:00+0000
时,我会收到一个错误:
这是可以预期的,因为该字符串不是有效的 iso8601 序列化。
可在 DateTime::Format::ISO8601 文档中找到有效的 iso8601 格式。
Mojo::XMLRPC 并不接受所有这些格式,它接受许多其他不属于 iso8601 的格式。
英文:
The problem is at the other end.
> During encode_xmlrpc
, <dateTime.iso8601>
is 2023-06-14T19:45:48Z
. Instead, I need it as: 20230614T22:45:48+0300
It's not configurable, and that's not a valid iso8601 serialization.
> During decode_xmlrpc
, I get an error when <dateTime.iso8601>
is 20230608T12:00:00+0000
:
That's to be expected since the string isn't a valid iso8601 serialization.
Valid iso8601 formats can be found in the documentation for DateTime::Format::ISO8601.
Mojo::XMLRPC doesn't accept all of them, and it accepts many other formats that aren't part of iso8601.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论