如何计算Perl中两个时间戳字符串之间的差异

时间:2013-10-20 22:23:22

标签: perl

我搜索了所有可能的问题,但找不到答案, 那么Perl专家可以帮我解决这个问题吗?

我有两个时间戳,例如05/25/2011 05:22:03 PM05/25/2011 05:34:08 PM。它们以 string 形式存储。

my $str1 = '05/25/2011 05:22:03';
my $str2 = '05/25/2011 05:34:08';

后者是工作结束的时间,前者是开始工作的时间。

如何找出日期和时间的差异?在这种情况下日期是相同的,但它们也可能不同。

2 个答案:

答案 0 :(得分:10)

我建议您使用Time::Piece模块。自从Perl 5的9.5版本发布以来,它一直是核心模块,所以它不需要安装。

此代码演示

use strict;
use warnings;

use Time::Piece;

my $str1 = 'Execution started at 05/25/2011 05:22:03 PM';
my $str2 = 'Execution completed at 05/25/2011 05:34:08 PM';

my @times = map Time::Piece->strptime(/(\d.+M)/, '%m/%d/%Y %H:%M:%S %p'), $str1, $str2;

my $delta = $times[1] - $times[0];
print $delta->pretty;

<强>输出

12 minutes, 5 seconds

答案 1 :(得分:1)

您可以利用DateTime及其 subtract_datetime()方法,该方法返回DateTime::Duration个对象。

use Date::Parse;
use DateTime;

my $t1 = '05/25/2011 05:22:03';
my $t2 = '05/25/2011 05:34:08';

my $t1DateTime = DateTime->from_epoch( epoch => str2time( $t1 ) );
my $t2DateTime = DateTime->from_epoch( epoch => str2time( $t2 ) );

my $diff = $t2DateTime->subtract_datetime( $t1DateTime );

print "Diff in minutes: " . $diff->in_units('minutes') . "\n";
print "Diff in hours: " . $diff->in_units('hours') . "\n";
print "Diff in months: " . $diff->in_units('months') . "\n";