2009-12-03 2 views

답변

17

은 이것이 내가 할 필요가있는 유일한 날짜 형식 일 뿐이고 다른 어떤 날짜 기능도 필요로하지 않는다면, 나는 단지 Perl과 함께 제공되는 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]; 

이이 시대 이후 초 마지막 수정 시간을 반환을 수정하세요. 0을 반환 월, 2 월 1, 등, 및 $ 연도 1900 년 이후 년의 수, 그래서 109입니다 localtime과

my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime); 

주 -

그런 다음의 현지 사용, 최신 구성 요소로 변환하기 - > 2009 년

는 다음 형식 DDMMYY에서 출력 - 덜 오류가 발생하기 쉬운 - - 당신이 할 수있는 경우에 단순히 날짜 : 포맷을 사용하는

print substr('0'.$mday,-2), substr('0'.($mon+1),-2), substr($year+1900,-2); 

은 그래서 쉽게이야.

+3

POSIX :: strftime ('% m % d % y', $ mtime)도 쉽고 오류가 발생하기가 쉽지 않습니다. – ysth

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

이제 모듈을 사용할 수 있습니까? – innaM

+1

지원되지 않거나 설치되지 않았습니까? – innaM

10

객체 지향 구문에 대해서는 Time::Piece을 참조하십시오. 또한 Perl은 버전 5.10과 다음 버전에서 기본적으로 제공됩니다. 보통 나중에 더 많은 기능이 필요합니다. 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

4

여기 stat 수익률 (즉 고통 이유에 대한 Edg's answer 참조) 사항에 대한 자세한 내용은 만지작 피하기 위해 (인 코어 모듈) POSIX와 localtime를 사용하여 합리적으로 간단한 방법입니다 :

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"; 
} 
관련 문제