Pues eso,
que cómo obtengo la fecha actual en un cgi en perl.
saludos
| |||
Hola, Bueno, me parece que quizás la pregunta correcta es, ¿cómo obtener la fecha en Perl? El hecho de que vayas a usar tal recurso en una aplicación orientada a CGI es secundario. No es nada importante, es sólo una observación. :) Ahora bien, sobre la cuestión de la fecha... Perl dispone de algunas funciones útiles en este sentido: * time() - Retorna la fecha y hora actual del sistema en formato "UNIX timestamp", el cual consiste básicamente de la cantidad de segundos transcurridos desde el comienzo del 1 de Enero de 1970 hasta determinado momento. * localtime() - Dado que en muchas ocasiones el formato UNIX timestamp no es muy apropiado para algunas cosas, localtime resulta útil para "humanizarlo". Esta función recibe una fecha/hora en formato UNIX timestamp y retorna una lista de 9 valores más cómodos que corresponden a la fecha/hora recibida. En orden, los valores que retorna son: - segundos - minutos - horas - dia del mes - mes - año - día de la semana - día del año - un valor falso/verdadero que indica si el tiempo especificado ocurre durante el día a no. Ahora viene lo bueno... ¿En qué formato deseas tener el dato de la fecha? Puede que quieras contar con algo como "DD/MM/YY", "YYYY-MM-DD", "MM-DD-YYYY HH:MM, etc. Aquí viene a jugar lo que hagas con la información que retorna localtime(). A continuación te presento un ejemplo del manejo de fechas/horas en Perl:
Código:
#! /usr/bin/perl -w use strict; use vars qw($segundos $minutos $horas $dia_mes $mes $anyo $dia_semana $dd $mm $yy $yyyy $HH $MM $am_pm $dia_semana_castellano $mes_castellano $fecha_unix); ### Aqui empieza el codigo interesante ### $fecha_unix = time (); # Comenzamos obteniendo la fecha/hora actual # Ahora le pedimos a localtime() que nos ayude a procesar la fecha, # para contar con valores mas comodos. Los campos que esta funcion # retorna y no necesitamos podemos ignorarlos. En este caso `undef' # permite hacer tal cosa. ($segundos, $minutos, $horas, $dia_mes, $mes, $anyo, $dia_semana, undef, undef) = localtime ($fecha_unix); # Ahora realizamos algunos procesamientos propios... Todo depende de # como queremos disponer de la fecha/hora. # Primero tomemos los valores de dia y mes, asegurando que cuenten con # dos digitos. $dd = $dia_mes < 10 ? '0' . $dia_mes : $dia_mes; $mm = $mes < 10 ? '0' . $mes : $mes; if ($anyo < 1900) { $anyo += 1900 } # Con el proposito de evitar el `bug' del milenio $yy = substr ($anyo, 2, 2); # Ahora produzcamos tambien otros formatos para las horas $MM = $minutos < 10 ? '0' . $minutos : $minutos; if ($horas > 12) { $HH = $horas - 12 < 10 ? '0' . ($horas - 12) : $horas - 12; $am_pm = 'PM'; } else { $HH = $horas < 10 ? '0' . $horas : $horas; $am_pm = 'pm'; } # Finalmente, vamos a preparar un formato personalizado, y en este # caso, "castellanizado". Es posible, para este proposito, utilizar # ciertas funciones que dependen de la forma en que se encuentre # configurado el sistema. Sin embargo, estas por obvias razones pueden # producir resultados diferentes en maquinas diferentes; asi que # preferiremos implementar nuestra propia solucion. for ($dia_semana) { /^0$/ && do { $dia_semana_castellano = 'Domingo'; last; }; /^1$/ && do { $dia_semana_castellano = 'Lunes'; last; }; /^2$/ && do { $dia_semana_castellano = 'Martes'; last; }; /^3$/ && do { $dia_semana_castellano = 'Miercoles'; last; }; /^4$/ && do { $dia_semana_castellano = 'Jueves'; last; }; /^5$/ && do { $dia_semana_castellano = 'Viernes'; last; }; /^6$/ && do { $dia_semana_castellano = 'Sabado'; last; }; } for ($mes) { /^1$/ && do { $mes_castellano = 'Enero'; last; }; /^2$/ && do { $mes_castellano = 'Febrero'; last; }; /^3$/ && do { $mes_castellano = 'Marzo'; last; }; /^4$/ && do { $mes_castellano = 'Abril'; last; }; /^5$/ && do { $mes_castellano = 'Mayo'; last; }; /^6$/ && do { $mes_castellano = 'Junio'; last; }; /^7$/ && do { $mes_castellano = 'Julio'; last; }; /^8$/ && do { $mes_castellano = 'Agosto'; last; }; /^9$/ && do { $mes_castellano = 'Septiembre'; last; }; /^10$/ && do { $mes_castellano = 'Octubre'; last; }; /^11$/ && do { $mes_castellano = 'Noviembre'; last; }; /^12$/ && do { $mes_castellano = 'Diciembre'; last; }; } # Ahora vamos a mostrar la fecha, en algunos formatos comunes. print "\nEn este momento, la fecha/hora del sistema es la siguiente:\n\n"; print " UNIX timestamp : $fecha_unix\n"; print " D-M-Y H:M:S : $dia_mes-$mes-$anyo $horas:$minutos:$segundos\n"; print " DD/MM/YY : $dd/$mm/$yy\n"; print " Personalizado : $dia_semana_castellano $dia_mes " . "de $mes_castellano, $anyo $HH:$MM $am_pm\n"; Espero que pueda servirte como guía para tu propia aplicación. En mi sistema, al ejecutar este programa, produce la siguiente salida:
Código:
Nota que es un programa corriente escrito en Perl. Si quisieras adaptarlo a un entorno CGI, puedes utilizar el código a partir de la línea que reza "Aqui empieza el codigo interesante". Y si deseas que la salida aparezca en una página web, probablemente querrás añadir unas cuantas etiquetas <br />.$ perl fechas.pl En este momento, la fecha/hora del sistema es la siguiente: UNIX timestamp : 1058638607 D-M-Y H:M:S : 19-6-2003 13:16:47 DD/MM/YY : 19/06/03 Personalizado : Sabado 19 de Junio, 2003 01:16 PM Un cordial saludo. |
| |||
Hola: Veo que leonardop te respondió a tu pregunta con un código que funciona, pero creó que te puedo dar uno que aunque hace lo mismo es mucho más corto:
Código:
Saludos #!/usr/bin/perl -w use strict; #ARRAY CON EL NOMBRE DE LOS DIAS EN CASTELLANO my @dias = ('Domingo','Lunes','Martes','Miércoles', 'Jueves','Viernes','Sábado'); #ARRAY CON EL NOMBRE DE LOS MESES EN CASTELLANO my @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio', 'Agosto','Septiembre','Octubre','Noviembre','Diciembre'); my ($segundo,$minuto,$hora,$dia,$mes,$anio,$diaSemana) = (localtime(time))[0,1,2,3,4,5,6]; my $tiempo = sprintf("%02d:%02d:%02d",$hora,$minuto,$segundo); $anio += 1900; my $fecha = "$dias[$diaSemana] $dia de $meses[$mes] del $anio $tiempo"; print $fecha; |