La función localtime

localtime en contexto de Lista

Cuando localtime es llamada en un contexto de lista devuelve una lista como sigue:

 #  0    1    2     3     4    5     6     7     8
 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

Vea el siguiente ejemplo de uso:

  DB<1> @f = `ls`
  DB<2> chomp(@f) # eliminamos retornos de carro finales
  DB<3> x @f[0..5] # veamos los nombres de los 6 primeros ficheros
0  'a2pdf'
1  'Abstract.pm'
2  'adressbook.pl'
3  'advanced_perl_programming'
4  'amatch.pl'
5  'A.pl'
  DB<4> @s = stat $f[0]
  DB<5> x @s
0  2051 
1  2171079
2  33261
3  1
4  1007
5  1007
6  0
7  339
8  1111133369
9  1092043518
10  1096562651
11  4096
12  8
DB<6> use constant mtime => 9 # definimos la constante mtime como 9
DB<7> p $s[mtime] # formato Midnight Universal Time
1092043518
DB<8> @t = localtime $s[mtime] # contexto de lista
DB<9> x @t
0  18  # segundos
1  25  # minutos
2  10  # horas
3  9   # día del mes
4  7   # mes: Agosto. Enero es el 0.
5  104 # año desde 1900: 1900+104 = 2004
6  1   # dia de la semana: Lunes. Domingo es el 0.
7  221 # dia del año
8  1   # daylight savings time (cambio de horario) es cierto
DB<10> $t = localtime $s[mtime] # contexto escalar
DB<11> x $t 
0  'Mon Aug  9 10:25:18 2004'

localtime sin Argumentos

Cuando no se le da argumento a localtime devuelve el correspondiente al MUT devuelto por la función time:
lhp@nereida:~$ perl -wde 0
main::(-e:1):   0
  DB<1> p localtime
45307331084931
  DB<2> p scalar(localtime)
Thu Apr  3 07:30:54 2008

La función gmtime

La función gmtime es similar a localtime sólo que devuelve el tiempo Greenwich:

DB<3> $g = gmtime
DB<4> p $g
Thu Mar 31 17:47:13 2005
DB<5> $c = time
DB<6> p $c
1112291278
DB<7> p localtime $c
5847183121054891
DB<8> p "".localtime $c
Thu Mar 31 18:47:58 2005
DB<9> p scalar(localtime $c)
Thu Mar 31 18:47:58 2005
DB<10> p scalar localtime(time-(24*60*60)), "\n";
Wed Mar 30 19:14:33 2005

Ejercicio 2.9.1   Explique los resultados en los pasos 7, 8, 9 y 10 del ejemplo anterior.

Ejercicio 2.9.2   Usando el depurador de Perl calcule que día del calendario fué hace 500 días.

El Módulo Time::HiRes

Si se quiere tener mayor precisión en la medida del tiempo, use el módulo Time::HiRes. Sigue un ejemplo de uso:

DB<1> use Time::HiRes
DB<2> p time
1112339548
DB<3> p Time::HiRes::time
1112339556.72756
Puede verse como se usa un número flotante incluyendo no sólo los segundos sino los microsegundos MUT. Si queremos sustituir la función time por la que provee Time::HiRes deberemos importarla nombrándola explícitamente en el pragma use:

DB<4> use Time::HiRes "time"
DB<5> p time
1112339573.30229



Subsecciones
Casiano Rodríguez León
2009-10-04