在Perl中以DDMMYY格式獲取文件修改日期的最佳方式是什麼?如何在Perl中以DDMMYY格式獲取文件的修改日期?
(原來的問題是「如何做沒有一個DateTime模塊」我爲了使問題更普遍的去除這個限制。)
在Perl中以DDMMYY格式獲取文件修改日期的最佳方式是什麼?如何在Perl中以DDMMYY格式獲取文件的修改日期?
(原來的問題是「如何做沒有一個DateTime模塊」我爲了使問題更普遍的去除這個限制。)
如果這是我需要做的唯一日期格式,並且不需要任何其他日期功能,我只需使用POSIX(隨附Perl):
use POSIX;
my $file = "/etc/passwd";
my $date = POSIX::strftime(
"%d%m%y",
localtime(
(stat $file)[9]
)
);
如果您沒有使用相對時間,請忘記-M
。直接前往stat
獲取時代。
UPDATE:請注意,這個答案是原來的問題,它專門排除使用DateTime模塊。
若要修改時間
my $mtime = (stat $filename)[9];
這將返回的最後修改時間以秒計,因爲時代。
然後,要轉化爲最新組件,使用本地時間 -
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime);
注意的localtime返回0月,1月,等,$今年是年自1900年以來使109的數量, - > 2009年
然後在格式DDMMYY輸出 -
print substr('0'.$mday,-2), substr('0'.($mon+1),-2), substr($year+1900,-2);
所以它更容易 - 並且不易出錯 - 如果你能簡單地使用日期::格式。
POSIX :: strftime('%m%d%y',$ mtime)也更容易,也更容易出錯 – ysth 2009-12-03 16:52:13
查看Time::Piece的面向對象語法。在版本5.10和其他版本中,它也默認帶有Perl。 通常在稍後的某個時刻您需要更多的功能。使用Time :: Piece不會導入localtime
和gmtime
之外的任何內容。你可以通過只說use Time::Piece();
來要求它不要輸入任何內容。
use Time::Piece;
localtime((stat $filename)[9])->ymd; # 2000-02-29
localtime((stat $filename)[9])->ymd(''); # 20000229
localtime((stat $filename)[9])->dmy("");#is what you wanted
$perl -MTime::Piece -e 'print localtime(time)->dmy("")'
它是5.10的核心,這可能是相關的(因爲模塊可能是一個問題)。 – Telemachus 2009-12-03 15:41:21
這是一個使用POSIX(這是一個核心模塊)和localtime
避免與什麼stat
回報(見Edg's answer爲什麼這是一個痛苦)的細節擺弄一個相當簡單的方法:
use POSIX qw/strftime/;
my @records;
opendir my $dh, '.' or die "Can't open current directory for reading: $!";
while (my $item = readdir $dh) {
next unless -f $item && $item !~ m/^\./;
push @records, [$item, (stat $item)[9]];
}
for my $record (@records) {
print "File: $record->[0]\n";
print "Mtime: " . strftime("%d%m%Y", localtime $record->[1]), "\n";
}
使用Date :: Format模塊。 – innaM 2009-12-03 13:31:05
我找到了我想要的答案,並刪除了「無DateTime模塊」限制,以便使問題更通用。 – 2009-12-03 13:56:50
...這改變了問題。 – 2009-12-03 13:57:58