如何将文件创建时间与Perl中的当前时间进行比较?

时间:2008-12-29 11:00:02

标签: perl file time

我想比较Perl中的当前时间和文件创建时间,但两者的格式不同。 localtime采用以下格式:

22116291110813630

和文件创建时间

Today, December 29, 2008, 2:38:37 PM

我如何比较哪一个更大以及它们之间的区别?

4 个答案:

答案 0 :(得分:15)

它比使用stat()和time()/ localtime()更容易。

my $diff = -M $filename;

-M运算符返回文件的“age”(自程序启动以来的几天)。它记录在-X functionsperldoc -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 documentationperlcheat。在你的例子中,它看起来像所有人一起捣蛋。在标量上下文中,它返回一个格式化的字符串,如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}"'"'
}