如何在perl中获得时差?

时间:2014-11-28 22:04:07

标签: perl

我有两个只包含时间戳的字符串,看起来像这样 - my $t = "2014-11-28 00:00:00.000";如何在可读时间(天,小时,分钟,秒)之间获得时间差,而不是秒。我是新人,我在这方面遇到了很大的困难。每篇博客或文章都告诉我做不同的事情。有些事情是无法完成的,因为我没有这些模块。我甚至无法将模块安装到perl中,因为我正在处理的计算机上有许多珍珠版本。那么,cpan>安装一些:: modlue没有帮助。

请教我如何做到这一点。 请尝试使用核心perl。否则,我将不得不花费更多时间将perl模块安装到正确的perl

我开始编写一些代码,但它错了,没用 -

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

sub secondsToTime{

    my $inSeconds = shift;
    my $days = int($inSeconds/(24*60*60));
    my $hours = ($inSeconds/(60*60))%24;
    my $mins = ($inSeconds/60)%60;
    my $sec = $inSeconds%60;
    my $time = "$days days, $hours hours, $mins mins, $sec seconds";
    return $time;
}

# EXAMPLE timelocal( $sec, $min, $hour, $mday, $mon, $year );
my @today = localtime();
print "@today\n";
my $currentTime = timelocal(@today);

#my @t = (0, 00, 13, 28, 11, 2014);
#$currentTime = timelocal(@t);
my @birthday = (0, 00, 12, 28, 11, 2014); 
my $birthTime = timelocal(@birthday);
my $sec = ($currentTime - $birthTime);
my $time = secondsToTime($sec);

print "My age = $time\n";

1 个答案:

答案 0 :(得分:3)

您似乎不想帮助我们了解您的需求。

此计划将打印2014-11-28T00:00:00.000Z2014-11-28T00:00:00.000Z之间的差异。

use strict;
use warnings;

use Time::Piece;

my $start = '2014-11-28T00:00:00.000Z';
my $end   = '2014-11-28T00:00:00.000Z';

print difference($start, $end);

sub difference {
  my ($beg, $end) = map Time::Piece->strptime(s/\.\d*Z?\z//r, '%Y-%m-%dT%H:%M:%S'), @_;
  ($end-$beg)->pretty;
}

<强>输出

0 seconds