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

时间:2016-09-07 16:06:59

标签: perl date time compare zone

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

我尝试了类似下面的内容,并且由于显而易见的原因,我收到一条错误消息:" 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?
  3. OR有没有办法使用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);
    

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

自2007年以来,

Time::Piece一直是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;