我想比较 Perl 中的当前时间和文件创建时间,但两者的格式不同。本地时间是这种格式:
22116291110813630
和文件创建时间是
Today, December 29, 2008, 2:38:37 PM
我如何比较哪个更大以及它们的区别?
它甚至比使用 stat() 和 time()/localtime() 更容易。
my $diff = -M $filename;
-M 操作符返回文件的“年龄”(程序启动后的天数)。它记录在-X 函数下或perldoc -f -X
.
如果要比较值,您可能希望使用从localtime
标量上下文中获得的数字以及可以从中获得的 inode 更改时间stat
:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
在哪里:
0 文件系统的开发设备号 1 ino inode 编号 2模式文件模式(类型和权限) 3 nlink 文件的(硬)链接数 4 uid 数字 文件所有者的用户 ID 5 gid 文件所有者的数字组 ID 6 rdev 设备标识符(仅限特殊文件) 7 size 文件的总大小,以字节为单位 8 atime 自纪元以来的最后一次访问时间(以秒为单位) 9 mtime 自纪元以来的最后修改时间(以秒为单位) 10 ctime 自纪元以来的 inode 更改时间(以秒为单位) (*) 11 blksize 文件系统 I/O 的首选块大小 12 块 实际分配的块数
所以你想要第 9 场:
$mtime = ( stat $filename )[9];
$current_time = time;
$diff = $current_time - $mtime;
这两个功能要感谢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}"'"'
}