Introducción
Si viste el tutorial de Despliegue de Fecha I ya sabes la manera en que se puede desplegar la hora, esta vez, vamos a agregar un poco más de código para desplegar la fecha de una manera más amigable:
Viernes Enero 24 del 2002 a las 11:27:33
Aumentando
Antes habíamos visto la siguiente linea:
my ($minuto, $hora, $mday, $mes, $año) = (localtime(time))[1,2,3,4,5];
En este caso para lo que necesitamos vamos a agregar unos elementos más:
my ($segundo,$minuto,$hora,$dia,$mes,$anio,$diaSemana) = (localtime(time))[0,1,2,3,4,5,6];
Como podrás ver agregamos, "$segundo" y "$diaSemama". "$diaSemana" nos indica en que día estamos, es decir en la semana hay 7 días por lo que si es Lunes estaremos en el día "2".
Muy bien, ahora tenemos todos los elementos necesarios, vayamos con la siguiente parte.
Arrays
Lo tenemos todo en números, pero ¿cómo hacemos que eso se convierta en palabras?. Eso es sumamente sencillo, primero crearemos dos arrays con los nombres de los días y el de los meses:
my @dias = ('Domingo','Lunes','Martes','Miércoles',
'Jueves','Viernes','Sábado');
my @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
Nota: Recuerda que la semana empieza con Domingo, no con el Lunes.
Muy bien, ya tenemos nuestros arrays, esos los vamos a dejar para más adelante, ahora veamos como vamos a desplegar la hora.
Comunmente los relojes despliegan la hora en el modo HH:MM:SS, así que nosotros también lo vamos a hacer de esa manera.
my $tiempo = sprintf("%02d:%02d:%02d",$hora,$minuto,$segundo);
No te vayas a frustrar, vamos a explicar esa linea con detenimiento.
El primer elemento es la variable a la que le asignamos todo "$tiempo", ahora el comando que vemos de "sprintf" es un comando especial de perl creada realmente para poder desplegar elementos de reportes de una manera ordenada, esta vez lo estamos utilizando para la hora.
La linea entre comillas dentro del comando, indican los espacios "%02d" esta indica que vamos a
desplegar dos números y en caso de faltar uno, sustituimos con un 0.
La siguiente parte después de la coma, son las variables que asignamos a cada espacio que deseas.
Muy bien ya tenemos todo ahora vamos a la linea más importante:
my $fecha = "$dias[$diaSemana] $meses[$mes] $dia del $anio a las $tiempo";
En esta parte es donde ya usamos los arrays que hicimos "@meses", "@dias" entonces debido a que "$diaSemana" y "$mes" son números los podemos facilmente asignar como espacios en el array para asi conseguir el día y el mes que deseamos.
La sintáxis de la linea "$fecha" se puede cambiar. Para que tenga los elementos que tu deseas y como los deseas.
Código Final
#!/usr/bin/perl -w
use strict;
my ($segundo,$minuto,$hora,$dia,$mes,$anio,$diaSemana) = (localtime(time))[0,1,2,3,4,5,6];
my @dias = ('Domingo','Lunes','Martes','Miércoles',
'Jueves','Viernes','Sábado');
my @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio',
'Agosto','Septiembre','Octubre','Noviembre','Diciembre');
my $tiempo = sprintf("%02d:%02d:%02d",$hora,$minuto,$segundo);
my $fecha = "$dias[$diaSemana] $meses[$mes] $dia del $anio a las $tiempo";
print $fecha;
exit(1);