Perl减去两个日期

时间:2016-10-27 08:39:12

标签: perl datetime

我在Perl中相当新。 我试图以这种格式减去两个日期

15.07.16 23:13:34
15.07.16 20:04:24

我知道我必须在日期对象中转换此字符串。我的问题是我被限制在基本的perl而没有安装额外的包。有办法吗?

我的版本是v5.8.4,输出应该是03:09:10

1 个答案:

答案 0 :(得分:4)

你说你正在使用Perl 5.8.4。您确实需要更新并获得安装CPAN模块的能力。

但是,这里只使用5.8.4中提供的核心Perl功能来实现您想要的功能。

#!/usr/bin/perl

use strict;
use warnings;
use Time::Local;

my $date1 = '15.07.16 23:13:34';
my $date2 = '15.07.16 20:04:24';

my $diff = date2sec($date1) - date2sec($date2);

print secs2duration($diff);

sub date2sec {
  my ($date) = @_;

  my ($day, $mon, $yr, $hr, $min, $sec) = split(/[. :]/, $date);

  # I've assumed that your timestamps are in your local timezone,
  # so I've used timelocal() here. If your timestamps are actually
  # UTC, you should use timegm() instead.
  return timelocal($sec, $min, $hr, $day, $mon-1, 2000 + $yr);
}

sub secs2duration {
  my ($secs) = @_;

  my $hours = int($secs / (60*60));
  $secs %= (60*60);
  my $mins = int($secs / 60);
  $secs %= 60;

  return sprintf '%02d:%02d:%02d', $hours, $mins, $secs;
}