2009-01-28 28 views
11

Necesito leer el reloj del sistema (hora y fecha) y mostrarlo en un formato legible para humanos en Perl.¿Cómo se lee la hora y la fecha del sistema en Perl?

Actualmente, estoy usando el siguiente método (que me pareció here):

#!/usr/local/bin/perl 
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun); 
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); 
$year = 1900 + $yearOffset; 
$theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year"; 
print $theTime; 

Cuando se ejecuta el programa, debería ver una fecha mucho más fácil de leer y de momento como este:

9:14:42, Wed Dec 28, 2005 

Parece que es más para ilustración que para código de producción real. ¿Hay alguna manera más canónica?

Respuesta

19

Uso localtime función:

En contexto escalar, hora local() devuelve el ctime (3) Valor:

$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" 
+0

Gracias, estaba haciendo que sea mucho más difícil de lo que debía ser. :) –

+1

Tenga en cuenta que 'localtime' es el formato (a?) De EE. UU. De la hora local; si realmente quieres proporcionar la salida, tienes que trabajar un poco más duro. –

8

Como alguien más ha dicho, puede utilizar hora local, pero Lo analizaría con Date::Format. Te dará la marca de tiempo formateada de la forma que más lo necesites.

+0

Gracias por el enlace. Definitivamente lo necesitaré para poner la fecha/hora en el formato estándar de los EE. UU. –

+0

Enlace permanente a [Fecha :: Formato] (http://search.cpan.org/dist/TimeDate/lib/Date/Format.pm) –

+0

Fecha :: El formato parece bastante inútil. Como la gente ha mencionado, POSIX :: strftime hace todo eso. –

14

Puede usar la hora local para obtener la hora y el strftime del módulo POSIX para formatearla.

Si bien sería bueno utilizar Date :: Format y su tiempo de ejecución porque utiliza menos sobrecarga, el módulo POSIX se distribuye con Perl, y por lo tanto, está garantizado que estará en un sistema determinado.

use POSIX; 
print POSIX::strftime("%A, %B %d, %Y", localtime()); 
# Should print something like Wednesday, January 28, 2009 
# ...if you're using an English locale, that is. 
# Note that this and Date::Format's strftime are pretty much identical 
+2

En Perl moderno> = 5.10 También recomendaría Time :: Piece (http://perldoc.perl.org/Time/Piece.html) –

8

Como todos los demás dijeron "localtime" es la forma en que dominas la fecha, de una manera fácil y directa.

Pero solo para darle una opción más. El DateTime module. Este módulo se ha convertido en uno de mis favoritos.

use DateTime; 
my $dt = DateTime->now; 

my $dow = $dt->day_name; 
my $dom = $dt->mday; 
my $month = $dt->month_abbr; 
my $chr_era = $dt->year_with_christian_era; 

print "Today is $dow, $month $dom $chr_era\n"; 

Esto imprimiría "Hoy es miércoles, 28 de enero de 2009AD". Solo para mostrar algunas de las muchas cosas que puede hacer.

use DateTime; 
print DateTime->now->ymd; 

Se imprime "2009-01-28"

+0

Y, para mayor flexibilidad, un objeto DateTime tiene un método 'strftime'. –

Cuestiones relacionadas