【发布时间】:2018-01-10 04:55:23
【问题描述】:
根据:
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 要求的真实字符串。
编辑:在构造函数中,我通过“格式化程序”指定所需的输出格式。我想使用已经指定的格式获取一个字符串,而不是再次指定格式(这将违反 DRY 原则......)
EDIT2:如果只是 $dt,则对字符串进行插值是一个很好的解决方案,但如果 $dt 实际上是一个 moose 属性(即“$person->birth_d”)则不起作用。
【问题讨论】: