根据:
http://search.cpan.org/~drolsky/DateTime-1.43/lib/DateTime.pm#Formatters_And_Stringification
以下内容将起作用:
use DateTime;
$dt = DateTime->new( ... );
print $dt; # as string
确实如此。
但是,当使用JSON模块将创建的$ dt字符串嵌入为json编码的数据结构时,如下所示:
use JSON;
my $json = JSON::encode_json( { dt => $dt } );
JSON模块抛出以下异常:
encountered object '2017-08-02', but neither allow_blessed nor convert_blessed settings are enabled at ...
我可以解决以下问题:
my $json = JSON::encode_json( { dt => substr($dt,0) } );
但是想知道是否有更简洁的方法从DateTime中获取“真正的”字符串?
我查看了DateTime文档,但是我没有看到明确的stringify()来创建JSON所需的真正字符串。
编辑:在构造函数中,我通过'formatter'指定所需的输出格式。我想使用已经指定的格式获取一个字符串,而不是再次指定格式(这将违反DRY原则......)
EDIT2:如果只是$ dt,插值字符串是一个很好的解决方案,但如果$ dt实际上是一个驼鹿属性(即“$ person-> birth_d”)则不起作用。
答案 0 :(得分:3)
您可以使用"$dt"
或"".$o->dt
。与您的解决方案一样,它是
$dt->formatter ? $dt->formatter->format_datetime($dt) : $dt->iso8601
如果您需要特定格式,可以$dt->strftime
,$dt->iso8601
,或者您可以使用DateTime::Format::模块。
答案 1 :(得分:2)
您可以在字符串("$dt"
)中显式插入对象,或调用实际调用的方法($dt->iso8601
)。
use strict;
use warnings;
use 5.010;
use DateTime;
my $dt = DateTime->now;
say $dt;
say "$dt";
say $dt->iso8601;
输出:
2017-08-02T19:54:22
2017-08-02T19:54:22
2017-08-02T19:54:22