将字符串日期转换为Perl DateTime

时间:2013-12-03 05:15:37

标签: perl datetime

我是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?
)

2 个答案:

答案 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的方法时,它甚至应该用于解析