2014-11-28 2 views
-2

У меня есть две строки, которые содержат только отметки времени, и выглядят так: my $t = "2014-11-28 00:00:00.000"; Как получить разницу во времени между тем в читаемое время (дни, часы, минуты, секунды), а не секунды. Я новичок, и мне приходится сталкиваться с большими трудностями в этом. Каждый блог или статья говорит мне делать разные вещи. Некоторые вещи не могут быть выполнены, потому что у меня нет модулей. Я даже не могу установить модули в perl, потому что у меня на компьютере, на котором я работаю, много перламутровых версий. Итак, cpan> install some :: modlue не помогает.Как получить разницу во времени в 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"; 
+0

, что временная зона являются временные метки в? – ysth

+0

Какие версии perl вам нужно поддерживать? – ysth

+0

@ysth - Perl 5.20. Временные метки будут находиться в MST или PST. Было бы неплохо иметь что-то, что учитывает временные метки. Благодарю. – smalls

ответ

3

Вы, кажется, не хотите помогите нам понять, что вам нужно.

Эта программа напечатает разницу между 2014-11-28T00:00:00.000Z и 2014-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 
+0

Невозможно найти Время/Piece.pm в @INC (@INC содержит: – smalls

+5

@smalls: Тогда вы полностью испортили свои установки в Perl. 'Time :: Piece' имеет был частью ядра Perl с версии 5.010, и если вы используете 5.20, и он не может его найти, тогда что-то серьезно не так. Вам нужно удалить * все * и начать с нуля. Посмотрите на ['App :: perlbrew '] (http://search.cpan.org/~gugod/App-perlbrew-0.72/lib/App/perlbrew.pm), если вы действительно хотите хранить несколько версий Perl. – Borodin

Смежные вопросы