0

我在 perl 中有一项任务,我需要执行“some_code”,但前提是日期从现在算起超过 24 小时。我正在尝试下面的代码,但它似乎不起作用。

sub function {

  use Date::Manip::Date
  use Date::Parse
  use Date::Format;

  my $yesterday = time() - 60*60*24;
  my $x = shift;
  my $env = shift;

  $env->{some_code} = 1 if $x < $yesterday;

 return $x;
}
4

2 回答 2

1

你可以很容易地做到这一点,只使用核心功能。

#!/usr/bin/perl                                                                                   

use strict;

my $new_time   = 1350570164; # 2012-10-18 14:22:44
my $older_time = 1350450164; # 2012-10-17 05:02:44

printf "time in sec: %d older that 24 hours: %d\n", $new_time, is_time_older_24($new_time);
printf "time in sec: %d older than 24 hours: %d\n", $older_time, is_time_older_24($older_time);

sub is_time_older_24 {
    my $given_time = shift;

    my $yesterday_time = time() - 60 * 60 * 24;
    return $given_time <= $yesterday_time
            ? 1
            : 0;
}

输出:

time in sec: 1350570164 older that 24 hours: 0
time in sec: 1350450164 older than 24 hours: 1
于 2012-10-18T14:35:49.393 回答
1
#! /usr/bin/env perl
use Modern::Perl;
use Data::Dumper;
use DateTime;

my $now = DateTime->new( 
                    year => 2012, month => 10, day => 18, 
                    hour => 17, minute => 30, 
                    time_zone => 'UTC'
                );
# my $now = DateTime->now(time_zone => 'UTC');

my $last_run = DateTime->new(
                    year => 2012, month => 10, day => 17, 
                    hour => 19, minute => 30, 
                    time_zone => 'UTC'
                );

my $duration= $now->subtract_datetime($last_run);
say "hours: " . $duration->hours;

结果:

hours: 22

也可以看看:

于 2012-10-18T16:25:43.920 回答