我想比较Perl中的当前时间和文件创建时间,但两者的格式不同。 localtime采用以下格式:
22116291110813630
和文件创建时间
Today, December 29, 2008, 2:38:37 PM
我如何比较哪一个更大以及它们之间的区别?
答案 0 :(得分:15)
它比使用stat()和time()/ localtime()更容易。
my $diff = -M $filename;
-M运算符返回文件的“age”(自程序启动以来的几天)。它记录在-X functions或perldoc -f -X
。
答案 1 :(得分:13)
如果您想比较值,您可能希望使用标量上下文中localtime
获得的数字以及stat
可以获得的inode更改时间:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
其中:
0 dev device number of filesystem 1 ino inode number 2 mode file mode (type and permissions) 3 nlink number of (hard) links to the file 4 uid numeric user ID of file's owner 5 gid numeric group ID of file's owner 6 rdev the device identifier (special files only) 7 size total size of file, in bytes 8 atime last access time in seconds since the epoch 9 mtime last modify time in seconds since the epoch 10 ctime inode change time in seconds since the epoch (*) 11 blksize preferred block size for file system I/O 12 blocks actual number of blocks allocated
所以你想要第9场:
$mtime = ( stat $filename )[9];
$current_time = time;
$diff = $current_time - $mtime;
答案 2 :(得分:3)
localtime
返回列表上下文中的值列表。请参阅the localtime documentation或perlcheat。在你的例子中,它看起来像所有人一起捣蛋。在标量上下文中,它返回一个格式化的字符串,如Mon Dec 29 03:16:33 2008
。在大多数平台上,文件inode更改时间将从stat
返回,作为自某个时期以来的秒数。您应该可以直接将其与time()
(不 localtime()
)的结果进行比较。
答案 3 :(得分:0)
这两个功能归功于jimtut的回答。 fileage以秒为单位打印秒数,非常适合在shell中使用,也可以在创建文件时打印。 fileage是上述问题的答案,而dataage为文件内容打印相同,因为我正在寻找的答案我确信这些都有用。
function fileage {
perl -e 'printf "%i\n", 60 * 60 * 24 * -C "'"${1:?Must provide a file name}"'"'
}
function dataage {
perl -e 'printf "%i\n", 60 * 60 * 24 * -M "'"${1:?Must provide a file name}"'"'
}