将日期时区与 perl 中的 time() 进行比较

Compare date time zone with time() in perl

我正在尝试比较格式为:08-07-2016 08:16:26 GMT 的文件创建时间与使用 perl 中的 time() 的当前时间。 由于 time() returns 纪元时间,我不确定如何找到这两种不同时间格式之间的时差。

我尝试了类似下面的方法,出于显而易见的原因,我收到一条错误消息:"Argument 08-07-2016 08:16:26 GMT" 不是减法中的数字。

my $current_time = time();
my $time_diff = $creation_time - $current_time;
if ($time_diff > 10) {                  #compare if the difference is greater than 10hours
    # do something...
}

我的一些问题:

  1. 由于我只想比较时差,如何从这两种时间格式中只提取小时数?
  2. 我不确定 $time_diff > 10 的比较是否正确。如何表示10小时? 10*60?

或者有没有办法至少使用 DateTime 或 Time::Local 将任何给定的时间格式转换为纪元?

如何将日期参数传递给 DateTime 构造函数?

my $dt1 = DateTime-> new (
                 year =>'1998',
                 month =>'4',
                 day   =>'4',
                 hour  =>'21',
                 time_zone =>'local'
                 );

我们可以做一些类似的事情吗

my $date = '08-07-2016 08:16:26 GMT';
my $dt1 = DateTime->new($date);  # how can i pass a parameter to the constructor
print Dumper($dt1->epoch);

在此先感谢您的帮助。

Time::Piece 自 2007 年以来一直是 Perl 的标准部分。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;
use Time::Seconds;

my $creation_string = '08-07-2016 08:16:26 GMT';

my $creation_time = Time::Piece->strptime($creation_string, '%d-%m-%Y %H:%M:%S %Z');
my $current_time = gmtime;

my $diff = $current_time - $creation_time;

say $diff; # Difference in seconds
say $diff->pretty;