0

「some_code」を実行する必要がある perl のタスクがありますが、日付が今から数えて 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/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 に答える
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 に答える