如何使用Perl获得两个时间戳的差异?

时间:2010-12-16 12:11:17

标签: perl

这里我基于一个问题..我有两个相同格式的时间戳(2010年12月14日18:23:19和2010年12月14日17:23:19)。我怎样才能在几小时内得到两个时间戳的差异。 请帮帮我

3 个答案:

答案 0 :(得分:9)

use Date::Parse;


my $t1 = 'Tue Dec 14 17:23:19 2010';
my $t2 = 'Tue Dec 14 18:23:19 2010';

my $s1 = str2time( $t1 );
my $s2 = str2time( $t2 );

print $s2 - $s1, " seconds\n";

答案 1 :(得分:5)

我使用DateTime系列类进行几乎所有的日期/时间处理。

#!/usr/bin/perl

use strict;
use warnings;

use DateTime::Format::Strptime;

my $dp = DateTime::Format::Strptime->new(
  pattern => '%a %b %d %H:%M:%S %Y'
);

# Create two DateTime objects
my $t1 = $dp->parse_datetime('Tue Dec 14 17:23:19 2010');
my $t2 = $dp->parse_datetime('Tue Dec 14 18:23:19 2010');

# The difference is a DateTime::Duration object
my $diff = $t2 - $t1;

print $diff->hours;

答案 2 :(得分:1)

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

use Date::Parse;
use DateTime;

my $t1 = 'Tue Dec 14 17:23:19 2010';
my $t2 = 'Tue Dec 14 18:23:19 2010';

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 hours: " . $diff->in_units('hours') . "\n";
print "Diff in months: " . $diff->in_units('months') . "\n";