occ*_*lti 1 format perl time milliseconds
我需要在Perl中计算这两个变量之间的时差:
my $end = "17:23:31,576";
my $start = "17:23:30,858";
Run Code Online (Sandbox Code Playgroud)
我如何计算时差($end - $start)?重要的是返回的值保持相同的格式.
理想情况下,我希望用原生功能来做到这一点
我已经试过像包Time::Piece;和DateTime::Format::Strptime; 但无法使其发挥作用.
DateTime解决方案,因为它具有对小数秒的本机支持.获得两个DateTime对象后,可以使用以下程序:
# delta_ms loses nanoseconds, but we need it to convert days into hours.
my ($h, $m, $s) = $dt2->delta_ms($dt1)->in_units(qw( hours minutes seconds ));
my $ns = ( $dt2 - $dt1 )->nanoseconds;
say sprintf '%d:%02d:%02d,%03.0f', $h, $m, $s, $ns/1_000_000;
Run Code Online (Sandbox Code Playgroud)
现在,让我们看看如何获取两个DateTime对象.根据提供的信息,您可以做的最好的事情如下:
use DateTime::Format::Strptime qw( );
my $format = DateTime::Format::Strptime->new(
pattern => '%H:%M:%S,%3N',
time_zone => 'floating',
on_error => 'croak',
);
my $dt1 = $format->parse_datetime('01:59:58,123');
my $dt2 = $format->parse_datetime('03:01:02,456');
Run Code Online (Sandbox Code Playgroud)
与所有其他解决方案一样,这并不总能给出正确答案,因为差异可能取决于日期和时区(例如,由于DST更改),并且此信息无法提供.
如果您确实拥有可用的信息,那么您将使用以下内容,而1:01:04,333不是0:01:04,333在DST开始的当天.
use DateTime::Format::Strptime qw( );
my $format = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d %H:%M:%S,%3N',
time_zone => 'America/New_York', # Often: 'local'
on_error => 'croak',
);
my $dt1 = $format->parse_datetime('2015-03-09 01:59:58,000');
my $dt2 = $format->parse_datetime('2015-03-09 03:01:02,000');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |