我是Perl的新手,所以请耐心等待我:
我正在编写一个日志解析器并成功解析了“Dec 1 17:45:36。 185 ”到它的各个单位(月,日,小时,分钟,秒,毫秒)。我想将其转换为Perl的DateTime
对象。
我遇到了毫秒部分的问题: .185 。
我希望像这样使用DateTime::Format::Strptime
:
my $strp = DateTime::Format::Strptime(
pattern => "%b %d %H:%M:%S" # how do I add the milliseconds part?
)
答案 0 :(得分:2)
如果要显示毫秒,请使用以下格式%3N
:
my $strp = DateTime::Format::Strptime(
pattern => "%b %d %H:%M:%S.%3N" # now we have the milliseconds part
)
N
之前的数字jut表示将显示的位数
显示的数字是截断的,而不是舍入的。
答案 1 :(得分:1)
我可能会误解你。但是如果你想要一个这样的对象:http://metacpan.org/pod/DateTime并知道各个数字,为什么不使用这样的构造函数:
use DateTime;
$dt = DateTime->new(
year => 1964,
month => 10,
day => 16,
hour => 16,
minute => 12,
second => 47,
nanosecond => 500000000,
time_zone => 'Asia/Taipei',
);
或者您是否想知道如何将该信息格式化为字符串?在这种情况下,您可以使用sprintf
和DateTimes获取方法来生成您想要的任何格式。
编辑:我想我现在理解你了。 DataTime没有ms,只有ns。在构建时,这没有问题,因为你可以放nanosecond => ($ms*1000000)
,但我知道在使用::Strptime
时这可能是一个问题。
我不能在这里安装DateTime来测试它,但CPAN确实说
%N
Nanoseconds. For other sub-second values use %[number]N.
因此,当你有一个纳秒的DateTime对象时,你可以使用那个[number]
值来看它的作用,当你找到一种告诉它你喜欢ms的方法时,它甚至应该用于解析