我在Perl中相当新。 我试图以这种格式减去两个日期
15.07.16 23:13:34
15.07.16 20:04:24
我知道我必须在日期对象中转换此字符串。我的问题是我被限制在基本的perl而没有安装额外的包。有办法吗?
我的版本是v5.8.4,输出应该是03:09:10
。
答案 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;
}