将字符串日期转换为Perl DateTime

将字符串日期转换为Perl DateTime,perl,datetime,Perl,Datetime,我是Perl的新手,请耐心等待: 我正在编写一个日志解析器,并已成功地将“Dec 1 17:45:36.185”解析为它的各个单位(月、日、小时、分钟、秒、毫秒)。我想将其转换为Perl的DateTime对象 毫秒部分有问题:.185 我希望像这样使用DateTime::Format::strtime: my $strp = DateTime::Format::Strptime( pattern => "%b %d %H:%M:%S" # how do I add th

我是Perl的新手,请耐心等待:

我正在编写一个日志解析器,并已成功地将“Dec 1 17:45:36.185”解析为它的各个单位(月、日、小时、分钟、秒、毫秒)。我想将其转换为Perl的
DateTime
对象

毫秒部分有问题:.185

我希望像这样使用
DateTime::Format::strtime

my $strp = DateTime::Format::Strptime(
    pattern    => "%b %d %H:%M:%S"    # how do I add the milliseconds part?
)

我可能误解了你。但是,如果您想拥有这样一个对象:并且知道各个数字,为什么不像这样使用构造函数呢:

  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-get方法生成所需的任何格式

编辑:我想我现在明白你的意思了。数据时间没有ms,只有ns。在构造时,这是没有问题的,因为您可以将
纳秒=>($ms*1000000)
,但我知道在使用
::strtime
时这会是一个问题。 我不能在这里安装DateTime来测试它,但CPAN确实说

%N

Nanoseconds. For other sub-second values use %[number]N.

因此,当您有一个纳秒级的DateTime对象时,您可以使用该
[number]
值来查看它的功能,当您找到一种方法告诉它您喜欢ms时,它甚至可以用于解析。

如果您想显示毫秒,请使用此格式
%3N

my $strp = DateTime::Format::Strptime(
    pattern    => "%b %d %H:%M:%S.%3N"    # now we have the milliseconds part
)
N
前面的数字表示将显示的位数。

显示的数字被截断,而不是四舍五入。

请参阅“在Perl中用毫秒解析时间戳”。他不需要解析它,他已经解析了字符串。他正在寻找一种方法,将他解析的信息输出为字符串格式。我会帮你弄明白这一点,因为我过去用Perl做了很多工作,但现在我在iPad上。如果你明天没有答案,我会帮你解决。谢谢你,谢谢你的仔细回答,但很抱歉,我必须给@M42一个正确的答案,因为它很简短,切中要害,解决了我的问题(你也这么做了)。但我确实对你的答案投了反对票。