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 回答