我有以字符串格式的日期,我需要使用Perl脚本将其转换为毫秒。我试图使用DateTime::Format::Strptime
转换它,并在转换为毫秒后返回0。
日期字符串:01-13-15:14.16
#!/usr/bin/perl
use DateTime::Format::Strptime;
my $strp = DateTime::Format::Strptime->new(
pattern => '%m-%d-%y:%H.%M',
on_error => 'croak',
);
my $dt = $strp->parse_datetime("01-13-15:14.16");
print $dt->millisecond."\n";
如何将datetime转换为毫秒
答案 0 :(得分:4)
我认为你想要的不是毫秒而是epoch
,这是自1970年1月1日以来秒的数量。你的日期 - 时间格式既没有秒也没有毫秒,所以这两个字段都会报告为零,如果你真的想要毫秒,那么你可以简单地将epoch
乘以1000。
看起来像这样
use strict;
use warnings;
use 5.010;
use DateTime::Format::Strptime;
my $strp = DateTime::Format::Strptime->new(
pattern => '%m-%d-%y:%H.%M',
on_error => 'croak',
);
my $dt = $strp->parse_datetime('01-13-15:14.16');
say $dt->epoch;
<强>输出强>
1421158560
然而,DateTime
模块是巨大而缓慢的,核心模块Time::Piece
中有一个更好的解决方案,看起来像这样
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $dt = Time::Piece->strptime('01-13-15:14.16', '%m-%d-%y:%H.%M');
say $dt->epoch;
<强>输出强>
1421158560
答案 1 :(得分:2)
将日期转换为毫秒是不可能的。日期是一个时间点。毫秒测量持续时间。
你的问题唯一有意义的方法是,如果我们假设你的意思是“我给定的日期/时间与其他固定日期/时间之间有多少毫秒”。由于Unix测量时间的方式,让我们假设您测量的固定日期/时间是Unix Epoch(1970-01-01 00:00:00)。
使用epoch()
方法从DateTime对象获取自纪元以来的秒数。
say $dt->epoch;
要获得毫秒数,只需将其乘以一千。
say 1000 * $dt->epoch;
您当前的时间戳不包括毫秒。如果您更改为解析包含它们的字符串,那么您也可以添加该值。
say $dt->milliseconds + (1000 * $dt->epoch);
答案 2 :(得分:1)
添加我的评论作为答案:
如果您想将日期时间值转换为自纪元以来的秒数,请尝试以下方法之一:
print sprintf("%f", $dt->epoch + ($dt->millisecond/1000));
print sprintf("%s.%s", $dt->epoch, $dt->millisecond);
(我原来的评论没有说明毫秒是一个整数)
类似于以毫秒为单位的值,而不是秒.millis:
print sprintf("%d", ($dt->epoch * 1000) + $dt->millisecond);
print sprintf("%d%04d", $dt->epoch, $dt->millisecond);
请记住,如果您没有为DateTime提供包含毫秒(或更高分辨率)的值,则该值将只为零。