0

問題のあるデータ セットを作成中です。ファイルの変更時刻の年を 1900 年未満に設定しようとしています。Time::Localは 1900 からのオフセットを使用することを知っています。このオフセットを使用して、変更時刻が 1900 年より前に発生するファイルを作成する方法があるかどうか疑問に思っていました。(Windows 環境で。)

これは私がこれまで使用してきたコードです:

use strict;
use warnings;
use File::stat; 
use Time::localtime;
use Time::Local;

my $file = "test.txt";      
my $when = timelocal(0,0,10,25,6,1899);

#current mod time of the file
my $datetime_string = ctime(stat($file)->mtime);
print $datetime_string,"\n";

#change the mod time of the file
utime $when, $when, $file;

#new mod time
$datetime_string = ctime(stat($file)->mtime);
print $datetime_string,"\n";

編集:@ikegamiのコメントに関して、私は調べ始めましたWin32::API. 具体的にはWin32API::File::Time。これは私がこれまでに持っているコードです:

use Win32API::File::Time qw{:win};
$filename="AnnotationTest.java";
($atime, $mtime, $ctime) = GetFileTime ($filename);
print $mtime,"\n";
SetFileTime ($filename, $atime, $mtime, $ctime);
($atime, $mtime, $ctime) = GetFileTime ($filename);
print $mtime,"\n";

このコードでは、変更時間の形式が 100% わかりません。

4

1 に答える 1

1

utime がそこまでさかのぼることをサポートしているかどうかはわかりません。それが1970年からの符号付き32ビットオフセットである場合、それは1901年になるだけです。-(2**31) あたりにカットオフはありますか?

于 2012-05-25T15:41:34.700 に答える