1

現在の時刻を Test::MockTime モジュールに置き換えようとしています。それはうまくいきます:

use Test::MockTime qw(:all);
use Time::Local;
my $sec  = 0;
my $min  = 0;
my $hour = 14;
my $mday = 1; #1-31
my $mon  = 1; #1-12
my $year = 2013; #1970-...
set_fixed_time(timelocal($sec,$min,$hour,$mday,$mon-1,$year-1900));
print join "\n", localtime;

しかし、Time::localtime を使用すると、何も起こりません。

use Time::localtime;
use Time::Local;
use Test::MockTime qw(:all);

my ($sec,$min,$hour,$mday,$mon,$year)=(0,0,14,1,1,2013);

set_fixed_time(timelocal($sec,$min,$hour,$mday,$mon-1,$year-1900));

my $t=localtime();
my $xmon=$t->mon;
my $xyear=$t->year;
my $xday=$t->mday;
my $xmon_now=$xmon+1;
my $xyear_now=$xyear+1900;

print "$xmon_now $xyear_now\n";

出力は "12 2012" になります Time::localtime が使用されている場合、テストで時間を変更するにはどうすればよいですか? 私の英語に感謝し、申し訳ありません

更新:

use Time::localtime;
use Test::MockTime qw(:all);

動作しませんでした

use Test::MockTime qw(:all);
use Time::localtime;

正常に動作します) perl マジック

4

1 に答える 1

1

Test :: MockTimeはオーバーライドlocaltimeしますが、(オーバーライドされていないバージョンの)Time::localtimeを使用します。Time::localtimeを書き直す必要があります。CORE::localtimelocaltimelocaltime

于 2012-12-25T09:30:19.437 に答える