2009-12-03 77 views
1

在Perl中以DDMMYY格式獲取文件修改日期的最佳方式是什麼?如何在Perl中以DDMMYY格式獲取文件的修改日期?

(原來的問題是「如何做沒有一個DateTime模塊」我爲了使問題更普遍的去除這個限制。)

+1

使用Date :: Format模塊。 – innaM 2009-12-03 13:31:05

+0

我找到了我想要的答案,並刪除了「無DateTime模塊」限制,以便使問題更通用。 – 2009-12-03 13:56:50

+4

...這改變了問題。 – 2009-12-03 13:57:58

回答

17

如果這是我需要做的唯一日期格式,並且不需要任何其他日期功能,我只需使用POSIX(隨附Perl):

use POSIX; 

my $file = "/etc/passwd"; 

my $date = POSIX::strftime( 
      "%d%m%y", 
      localtime( 
       (stat $file)[9] 
       ) 
      ); 

如果您沒有使用相對時間,請忘記-M。直接前往stat獲取時代。

4

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); 

所以它更容易 - 並且不易出錯 - 如果你能簡單地使用日期::格式。

+3

POSIX :: strftime('%m%d%y',$ mtime)也更容易,也更容易出錯 – ysth 2009-12-03 16:52:13

0
use Date::Format; 
print time2str("%d%m%y", (stat $filename)[9]); 
+0

因此現在允許模塊? – innaM 2009-12-03 13:57:20

+1

不支持或未安裝? – innaM 2009-12-03 14:13:27

10

查看Time::Piece的面向對象語法。在版本5.10和其他版本中,它也默認帶有Perl。 通常在稍後的某個時刻您需要更多的功能。使用Time :: Piece不會導入localtimegmtime之外的任何內容。你可以通過只說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("")' 
+0

它是5.10的核心,這可能是相關的(因爲模塊可能是一個問題)。 – Telemachus 2009-12-03 15:41:21

4

這是一個使用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"; 
} 
相關問題