Perl Fecha y Hora

En este capítulo presentamos el manejo de fechas y horas en Perl.

En Perl, las funciones para manejar el tiempo son las siguientes:

  • 1. Función time():Devuelve el número de segundos transcurridos desde el 1 de enero de 1970.
  • 2. Función localtime():Obtiene la hora de la zona horaria local.
  • 3. Función gmtime():Obtiene la hora de Greenwich (GMT).

Hora y fecha actuales

A continuación, veamos lalocaltime()función. Esta función devuelve la fecha y hora actuales cuando no tiene parámetros.

Los siguientes 9 símbolos representan diferentes parámetros de fecha y hora:

sec,     # 秒, 0 到 61
min,     # 分钟, 0 到 59
hour,    # 小时, 0 到 24
mday,    # 天, 1 到 31
mon,     # 月, 0 到 11
year,    # 年,从 1900 开始
wday,    # 星期几,0-6,0表示周日
yday,    # 一年中的第几天,0-364,365
isdst    # 如果夏令时有效,则为真

Ejemplo demostrativo a continuación:

Ejemplo

#!/usr/bin/perl @months = qw(Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre); @days = qw(Domingo Lunes Martes Miércoles Jueves Viernes Sábado); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "$mday $months[$mon] $days[$wday]\n";

El resultado de ejecutar el ejemplo anterior es:

12 六月 星期天

Si se llama directamente a localtime(), devuelve la hora de la zona horaria configurada actualmente en el sistema. Ejemplo:

Ejemplo

#!/usr/bin/perl $datestring = localtime(); print "La fecha y hora son:$datestring\n";

El resultado de ejecutar el ejemplo anterior es:

时间日期为:Sun Jun 12 11:27:31 2016

Hora de Greenwich (GMT)

Funcióngmtime()Similar a localtime(), pero devuelve la hora estándar de Greenwich.

Ejemplo

#!/usr/bin/perl $local_datestring = localtime(); print "La fecha y hora local son:$local_datestring\n"; $gmt_datestring = gmtime(); print "La fecha y hora GMT son:$gmt_datestring\n";

El resultado de ejecutar el ejemplo anterior es:

本地时间日期为:Sun Jun 12 11:32:14 2016
GMT 时间日期为:Sun Jun 12 03:32:14 2016

Del ejemplo podemos ver que la hora de China y la hora de Greenwich difieren en 8 horas.


Formatear fecha y hora

Podemos usar los 9 elementos de tiempo de la función localtime() para generar el tiempo en el formato deseado. Para la salida formateada se usa la función printf():

Ejemplo

#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("Tiempo formateado: HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);

El resultado de ejecutar el ejemplo anterior es:

格式化时间:HH:MM:SS
11:35:23

Tiempo de época (Epoch Time)

Podemos usar la función time() para obtener el tiempo de época. Esta función devuelve el número de segundos transcurridos desde el 1 de enero de 1970. Ejemplo:

Ejemplo

#!/usr/bin/perl $epoc = time(); print "El número de segundos transcurridos desde el 1 de enero de 1970 es:$epoc\n";

El resultado de ejecutar el ejemplo anterior es:

从1970年1月1日起累计的秒数为:1465702883

Podemos generar un formato de tiempo que deseemos:

Ejemplo

#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "Hora y fecha actuales:"; printf("%d-%d-%d %d:%d:%d",$year+1900,$mon+1,$mday,$hour,$min,$sec); print "\n"; $epoc = time(); $epoc = $epoc - 24 * 60 * 60; # Segundos de hace un día ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc); print "Hora y fecha de ayer:"; printf("%d-%d-%d %d:%d:%d",$year+1900,$mon+1,$mday,$hour,$min,$sec); print "\n";

El resultado de ejecutar el ejemplo anterior es:

当期时间和日期:2017-3-15 12:47:54
昨天时间和日期:2017-3-14 12:47:54

Función POSIX strftime()

La función strftime() puede formatear el tiempo en el formato que queramos.

La siguiente tabla enumera algunos símbolos de formato; el símbolo * indica que depende de la hora local:

Símbolo Descripción Ejemplo
%a Abreviatura del día de la semana (Sun..Sat) * Thu
%A Nombre completo del día de la semana (Sunday..Saturday) * Thursday
%b Abreviatura del mes (Jan..Dec) * Aug
%B Nombre completo del mes (January..December) * August
%c Fecha y hora * Thu Aug 23 14:55:02 2001
%C Año dividido por 100 y redondeado (00-99) 20
%d Día del mes (01-31) 23
%D Fecha,MM/DD/YYequivalente a%m/%d/%y 08/23/01
%e Día del mes, con espacio en un solo dígito ( 1-31) 23
%F YYYY-MM-DDla abreviatura es similar a%Y-%m-%d 2001-08-23
%g Los dos últimos dígitos del año (00-99) 01
%g año 2001
%h Abreviatura del mes * (y%bmisma opción) Aug
%HFormato de 24 horas (00-23) 14
%I Formato de 12 horas (01-12) 02
%j Día del año (001-366) 235
%m Mes (01-12) 08
%M Minuto (00-59) 55
%n Nueva línea ('\n')
%pMuestra AM o PM PM
%r Hora (hh:mm:ss AM o PM), 12 horas * 02:55:02 pm
%R 24 horasHH:MMFormato de hora, equivalente a%H:%M 14:55
%S Segundos (00-61) 02
%t Tabulador horizontal ('\t')
%T Hora (formato 24h) (hh:mm:ss), equivalente a%H:%M:%S 14:55
%u Formato del día de la semana ISO 8601, siendo el lunes1 (1-7) 4
%U Semana del año, con el domingo como primer día (00-53) 33
%V Semana según ISO 8601 (00-53) 34
%w Día de la semana (0 representa el domingo) (0-6) 4
%W Semana del año, con el lunes como primer día (00-53) 34
%x Formato de fecha (mm/dd/yy) * 08/23/01
%X Formato de hora * 14:55:02
%y Año, dos dígitos (00-99) 01
%Y año 2001
%z Desplazamiento de zona horaria según ISO 8601 respecto a UTC (1 minuto=1, 1 hora=100)

+100
%Z Nombre de la zona horaria actual, como "Hora estándar de China" *

CDT
%% %Símbolo %

Ejemplo

#!/usr/bin/perl use POSIX qw(strftime); $datestring = strftime "%Y-%m-%d %H:%M:%S", localtime; printf("Fecha y hora -$datestring\n"); # Fecha y hora formateadas GMT $datestring = strftime "%Y-%m-%d %H:%M:%S", gmtime; printf("Fecha y hora -$datestring\n");

El resultado de ejecutar el ejemplo anterior es:

时间日期 - 2016-06-12 12:15:13
时间日期 - 2016-06-12 04:15:13
Otras extensiones