Set time in perl

来源:百度文库 编辑:神马文学网 时间:2024/06/03 06:34:44
use strict;
use Time::Local;
use Win32::API;
my $GetSystemTime;
my $SetSystemTime;
my @time = getTime (); # get the system time
my $ret = setTime (@time); # set the time back to the same time for test
exit;
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub getTime {
if (not $GetSystemTime) {
$GetSystemTime = new Win32::API(‘Kernel32.dll‘, ‘GetSystemTime‘, ‘P‘,
‘V‘) or die "Get GetSystemTime: $! ($^E)";
}
# 8 short words: year month wday mday hr min sec msec
my $lpSystemTime = pack ‘SSSSSSSS‘, 0 x 8;
$GetSystemTime-> Call($lpSystemTime);
my @t = unpack ‘SSSSSSSS‘, $lpSystemTime;
printf "Current UT: %04u%02u%02u %02u:%02u:%02u.%03u\n", $t[0], $t[1], $t[3],
$t[4], $t[5], $t[6], $t[7] if $debug;
return @t;
}
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub setTime {
my @t = @_;
my $SetSystemTime = new Win32::API(‘Kernel32.dll‘, ‘SetSystemTime‘, ‘P‘, ‘I‘)
or die "Get SetSystemTime: $! ($^E)"
# 8 short words: year month wday mday hr min sec msec
my $lpSystemTime = pack ‘SSSSSSSS‘, $t[5]+1900, $t[4]+1, 0, $t[3], $t[2],
$t[1], $t[0], 500; # wday not used and msec not avail so use half
my $ret = $SetSystemTime-> Call($lpSystemTime);
print "SetSystemTime ret=$ret\n" if $debug;
return $ret;
}
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
__END__