2009-08-26 9 views

Antwort

9

Die Standardmethode ist POSIX-Modul zu verwenden und es ist strftime Funktion.

use POSIX qw(strftime); 
use File::stat; 

my $stat_epoch = stat('some_file.name')->ctime; 
print strftime('%Y-%m-%d %H:%M:%S', localtime($stat_epoch)); 

All dieses Marker wie% Y, m% und so weiter, sind in Standard definiert, und die Arbeit des gleiches in C, system "date" -Befehl (zumindest auf Unix) und so weiter.

+0

strftime ist der Weg zu gehen. Nicht viel Aufhebens und viel Flexibilität im Ausgabeformat. – Kevin

0
use DateTime; 
$dt = DateTime->from_epoch(epoch => $epoch); 

Das Datetime-Objekt enthält dann die Darstellungen, die Sie benötigen, z. $year = $dt->year; usw. Im skalaren Kontext erhalten Sie eine schöne, von Menschen lesbare Darstellung, z.

$epoch = 123456789; 
$dt = DateTime->from_epoch(epoch => $epoch); 
print $dt; 

1973-11-29T21:33:09 
0

Es ist ein Beispiel in Time :: localtime Perldoc für die Verwendung es ctime() ist diese Art der Sache zu tun.

use File::stat; 
use Time::localtime; 

my $date_string = ctime(stat($file)->ctime); 
0
use File::stat; 
use Time::CTime; 

$file = "BLAH BLAH BLAH"; 

$st = stat($file) or die "No $file: $!"; 
print strftime('%b %o', localtime($st->ctime)); 

#Feb 11th, for example. 
0

Wie Sie aus der Anzahl der Antworten hier sehen können, haben Sie viele Möglichkeiten. Ich mag das Date::Format Modul:

#!/usr/bin/perl 
use strict; 
use warnings; 

use Date::Format; 
use File::Stat; 

my $fs = File::Stat->new('.vimrc'); 
my $mtime = $fs->ctime(); 
print time2str("changed in %Y on %B, %o at %T\n", $mtime); 
3

Wenn alles, was Sie eine menschenlesbare Darstellung ist wollen, dann

print scalar localtime stat($filename)->ctime; 

wird die Arbeit machen. Dies druckt so etwas wie "Wed Jun 10 19:25:16 2009". Sie können das Format jedoch nicht beeinflussen. Wenn Sie die Zeit in GMT möchten, verwenden Sie stattdessen "scalar gmtime".

Dies ist ein spezielles Verhalten von localtime und gmtime im skalaren Kontext.

0

Erstens, verwenden Sie wirklich File::Stat statt File::stat? Wenn ja, und wenn Sie 5,8 oder höher haben, wechseln Sie zu File::stat.

perldoc localtime

  • localtime EXPR
  • localtime

    Wandelt eine Zeit, wie für die lokale Zeitzone analysiert, indem die Zeitfunktion zu einer 9-Element-Liste mit der Zeit zurück.

...

Im skalaren Kontext localtime() gibt den ctime(3) Wert:

Sobald Sie erkennen, dass localtime ein Argument nehmen, dann ist dein Geist in diesem Thread erwähnt zu allen anderen Möglichkeiten eröffnet.

#!/usr/bin/perl 

use strict; 
use warnings; 

use File::stat; 

my $stat = stat 't.pl'; 

print "$_\n" for $stat->ctime, scalar localtime($stat->ctime); 
+0

Heiliger Mist! Ich habe die Frage bearbeitet und File :: stat durch File :: Stat ersetzt. Diese Änderung jetzt rückgängig machen – innaM