Perl:从日期时间列表计算时间差

Perl: Calculate time differences from a list of datetime


需要有关如何根据日期时间列表计算时差的帮助。
我的日期时间数据列表如下,我想计算 t1-t2 和下一行 t2 -t1, t1-t2 之间的时间差,直到列表结束:-

数据
t1:2021 年 9 月 29 日 18:52:49 - 从这里开始 t1(这一行)- t1(这一行)
t2: 2021-Sep-29 18:52:50 - t1(上线)-t2(本线)
t1: 2021-Oct-08 16:09:36 -t2(上线)- t1(这一线)
t2: 2021-Oct-08 16:49:23 - t1(上线)- t2(此线(
t1:2021 年 10 月 8 日 16:55:01
t2:2021 年 10 月 8 日 17:00:00
....
...
...
tn:2021-2011 年 11 月 12:36:40

预期输出
t1:2021 年 9 月 29 日 18:52:49
时间:0 秒
t2:2021 年 9 月 29 日 18:52:50
时间:1秒
t1:2021 年 10 月 8 日 16:09:36
时间:1秒
t2:2021 年 10 月 8 日 16:49:23
时间:767,806 秒
t1:2021 年 10 月 8 日 16:55:01
时间:338 秒
t2:2021 年 10 月 8 日 17:00:00
时间:299 秒
....

我的脚本如下,我尝试将所有数据拆分为 t1 和 t2 的数组并计算 t1-t2 的时间差。

use Time::Piece;
my $file = './tmp/compiled/AllData_process.tmp';
open(OUT, ">" ,"tmp/compiled/AllData_compute.tmp") or die "Couldn't open file $!";
open (DATA, $file )or die "Couldn't open file $file, $!";
    @compute = <DATA>;
    foreach $compute(@compute){
        chomp $compute;
        if ($compute =~ s/t1://){
            push (@t1, $compute);
            for ($a = 0; $a < $#t1; $a = $a + 1){
              
            }
            print OUT "$t1[$a]\n";
        }
        
        if ($compute =~ s/t2://){
            push (@t2, $compute);
            for ($a = 0; $a < $#t2; $a = $a + 1){
              
            }
            print OUT "$t2[$a]\n";
        }
        my $timediff = time_difference($t1[$a],$t2[$a]);
        print OUT "$timediff\n";

    }

sub time_difference {
   my $date_format = '%Y-%b-%d %H:%M:%S';
   my ($beg, $end) = map Time::Piece->strptime($_,$date_format), @_;
   ($end-$beg)->seconds;
} 

输出
t1:2021 年 9 月 29 日 18:52:49
t2:2021 年 9 月 29 日 18:52:50
时间:1秒
t1:2021 年 10 月 8 日 16:09:36
t2:2021 年 10 月 8 日 16:49:23
时间:2387 秒
t1:2021 年 10 月 8 日 16:55:01
t2:2021 年 10 月 8 日 17:00:00
时间:299 秒
....

提前致谢

use 5.014;
use warnings;

use Time::Piece qw( );

sub parse_time { Time::Piece->strptime($_[0], '%Y-%b-%d %H:%M:%S')->seconds } 

my $prev;
while (<>) {
   say;

   s/^[^:]*:\s*//;
   my $time = parse_time($_);

   if ($prev) {
      my $diff = $time - $prev;
      say "time: $diff seconds";
   }

   $prev = $time;
}