perl 获取文件的时间戳并检查是否是今天

rryofs0p  于 2023-08-06  发布在  Perl
关注(0)|答案(4)|浏览(205)

在Perl中,我如何获得文件的时间戳并检查这是今天还是没有?

l0oc07j2

l0oc07j21#

我会(可能)使用-M
http://perldoc.perl.org/functions/-X.html
-M脚本开始时间减去文件修改时间,以天为单位。
这意味着您可以:

if ( -M $filename < 1 ) { 
    #if file is less than a day old
}

字符串
当然,这只适用于相对于脚本开始,而不是 * 现在 *,所以不适合长时间运行的脚本。

taor4pac

taor4pac2#

如果你告诉我们你到底做了什么,你有什么问题,这会有所帮助。
您可以使用File::stat来获取有关文件的信息。

use File::stat;
my $stat = stat($file);

字符串
您可以通过调用$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值转换为有用的对象。

use Time::Piece;
my $file_date = localtime($mtime);


你可以将它与当前日期进行比较。

if ($file_date->date eq localtime->date) {
  # file was created today
}

g6ll5ycj

g6ll5ycj3#

其中一种方法是将其浓缩为一行代码:perl -e '$f = shift; printf "file %s updated at %s\n", $f, scalar localtime((stat $f)[9])' file的。

vkc1a9a2

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"
   }
}

相关问题