在Perl中,我如何获得文件的时间戳并检查这是今天还是没有?
l0oc07j21#
我会(可能)使用-M:http://perldoc.perl.org/functions/-X.html-M脚本开始时间减去文件修改时间,以天为单位。这意味着您可以:
-M
if ( -M $filename < 1 ) { #if file is less than a day old }
字符串当然,这只适用于相对于脚本开始,而不是 * 现在 *,所以不适合长时间运行的脚本。
taor4pac2#
如果你告诉我们你到底做了什么,你有什么问题,这会有所帮助。您可以使用File::stat来获取有关文件的信息。
use File::stat; my $stat = stat($file);
字符串您可以通过调用$stat对象上的三个不同方法来获得三个不同的时间戳。
$stat
my $ctime = $stat->ctime; # inode change time my $atime = $stat->atime; # last access time my $mtime = $stat->mtime; # last modification time
型我想你可能想要$mtime,但我不能确定。这些变量中的每一个都包含时间,即自系统纪元以来的秒数(几乎可以肯定是1970年1月1日的00:00)。您可以使用Time::Piece将这些epoch值转换为有用的对象。
$mtime
use Time::Piece; my $file_date = localtime($mtime);
型你可以将它与当前日期进行比较。
if ($file_date->date eq localtime->date) { # file was created today }
型
g6ll5ycj3#
其中一种方法是将其浓缩为一行代码:perl -e '$f = shift; printf "file %s updated at %s\n", $f, scalar localtime((stat $f)[9])' file的。
perl -e '$f = shift; printf "file %s updated at %s\n", $f, scalar localtime((stat $f)[9])' file
vkc1a9a24#
1.阅读File::stat并获取文件的时间戳。How do I get a file's last modified time in Perl?
use File::stat; # we don't need anything but mtime # my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, # $atime, $mtime, $ctime, $blksize, $blocks) = stat($filename); my $ts = stat($filename)->mtime; print "ts:$ts"; print " date/time " . localtime($ts) . "\n"; ts:1469028287 date/time Wed Jul 20 16:24:47 2016
字符串哦,看,时间是一个很大的数字。多少.. .分钟/小时/天/年是吗?(dc是命令行计算器。)
$ dc 1469028287 60/p 24483804 60/p 408063 24/p 17002 356.25/p 47
型47年。(在上面用dc进行整数除法获得/损失了一些时间)。现在(Mon 8 Aug 10:58 ish 2016)- 46(其中46 =ishahem= 47)年= 1/1/1970 00:00:00 = unix日期/时间戳纪元。1.阅读本地时间,获取“现在”时间,获取今天从午夜到午夜的时间。http://perldoc.perl.org/functions/localtime.htmlhttp://www.perlhowto.com/working_with_date_timeHow do I use Perl's localtime with print to get the timestamp?注意本地时间的年份值为116(自1900年起为116年)。请注意,本地时间的月份值为7(8月为7。是的,因为0 = 1月,1 = 2月,e.t.c.)。
# localtime returns array or string depending on context. my $time = localtime; my @time = localtime; print "time:$time\n"; print "time array: " . join (":", (@time)) . "\n"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; use Time::Local; my $btime = timelocal(0,0,0,$mday,$mon,$year); my $etime = timelocal(59,59,23,$mday,$mon,$year); print "btime:$btime " . localtime($btime) . " etime:$etime " . localtime($etime) . "\n"; print "year:$year\n"; time:Mon Aug 8 11:40:33 2016 time array: 33:40:11:8:7:116:1:220:1 btime:1470610800 Mon Aug 8 00:00:00 2016 etime:1470697199 Mon Aug 8 23:59:59 2016 year:116
型1.检查文件时间戳是否在午夜之间。检查所有的东西。
if (($ts >= $btime) && ($ts <= $etime)) { print "File time $ts (".localtime($ts).") is TODAY.\n"; } else { print "File time $ts (".localtime($ts).") is NOT today.\n"; if ($ts < $btime) { print "File is BEFORE today. $ts < $btime\n"; } elsif ($ts > $etime) { print "File is in FUTURE. $ts > $etime\n"; } else { print "KERBOOM.\n" } }
4条答案
按热度按时间l0oc07j21#
我会(可能)使用
-M
:http://perldoc.perl.org/functions/-X.html
-M脚本开始时间减去文件修改时间,以天为单位。
这意味着您可以:
字符串
当然,这只适用于相对于脚本开始,而不是 * 现在 *,所以不适合长时间运行的脚本。
taor4pac2#
如果你告诉我们你到底做了什么,你有什么问题,这会有所帮助。
您可以使用File::stat来获取有关文件的信息。
字符串
您可以通过调用
$stat
对象上的三个不同方法来获得三个不同的时间戳。型
我想你可能想要
$mtime
,但我不能确定。这些变量中的每一个都包含时间,即自系统纪元以来的秒数(几乎可以肯定是1970年1月1日的00:00)。您可以使用Time::Piece将这些epoch值转换为有用的对象。
型
你可以将它与当前日期进行比较。
型
g6ll5ycj3#
其中一种方法是将其浓缩为一行代码:
perl -e '$f = shift; printf "file %s updated at %s\n", $f, scalar localtime((stat $f)[9])' file
的。vkc1a9a24#
1.阅读File::stat并获取文件的时间戳。How do I get a file's last modified time in Perl?
字符串
哦,看,时间是一个很大的数字。多少.. .分钟/小时/天/年是吗?(dc是命令行计算器。)
型
47年。(在上面用dc进行整数除法获得/损失了一些时间)。现在(Mon 8 Aug 10:58 ish 2016)- 46(其中46 =ishahem= 47)年= 1/1/1970 00:00:00 = unix日期/时间戳纪元。
1.阅读本地时间,获取“现在”时间,获取今天从午夜到午夜的时间。http://perldoc.perl.org/functions/localtime.htmlhttp://www.perlhowto.com/working_with_date_timeHow do I use Perl's localtime with print to get the timestamp?注意本地时间的年份值为116(自1900年起为116年)。请注意,本地时间的月份值为7(8月为7。是的,因为0 = 1月,1 = 2月,e.t.c.)。
型
1.检查文件时间戳是否在午夜之间。检查所有的东西。
型