Search code examples
perldatetimecomparezone

Compare date time zone with time() in perl


I am trying to compare a file creation time which is in the format: 08-07-2016 08:16:26 GMT with the current time using time() in perl. Since time() returns epoch time, I am not sure how to find the time difference between these two different time formats.

I tried something like below and for obvious reasons, I get an error saying: "Argument 08-07-2016 08:16:26 GMT" isn't numeric in subtraction".

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...
}

Some of the questions I have:

  1. Since I want to compare only the hour difference, how can I extract just the hours from both these time formats?
  2. I am unsure if the comparison of $time_diff > 10 is right. How to represent 10hours? 10*60?

OR is there a way to at least convert any given time format into epoch using DateTime or Time::Local?

How can I pass a a date parameter to a DateTime constructor?

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

Instead can we do something like

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);

Thanks in advance for any help.


Solution

  • Time::Piece has been a standard part of Perl since 2007.

    #!/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;