将字符串日期转换为Perl DateTime
我是Perl的新手,请耐心等待: 我正在编写一个日志解析器,并已成功地将“Dec 1 17:45:36.185”解析为它的各个单位(月、日、小时、分钟、秒、毫秒)。我想将其转换为Perl的将字符串日期转换为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
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一个正确的答案,因为它很简短,切中要害,解决了我的问题(你也这么做了)。但我确实对你的答案投了反对票。