Foros del Web » Programación para mayores de 30 ;) » Programación General »

Fechas con PERL

Estas en el tema de Fechas con PERL en el foro de Programación General en Foros del Web. Saben no se como puedo validar que una fecha escrita por el usuario sea valida, alguien sabe si existe una funcion como la de ASP ...
  #1 (permalink)  
Antiguo 13/01/2003, 15:03
 
Fecha de Ingreso: enero-2002
Mensajes: 41
Antigüedad: 22 años, 3 meses
Puntos: 0
Fechas con PERL

Saben no se como puedo validar que una fecha escrita por el usuario sea valida, alguien sabe si existe una funcion como la de ASP (isDATE), o algo parecido, o sera necesario desarrollar un modulo para que verifique....

Gracias a todos.
__________________
"Si exagerasemos nuestras alegrías como hacemos con nuestras tristezas, nuestros problemas perderían importancia"
Anatole France
  #2 (permalink)  
Antiguo 14/01/2003, 05:57
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Delfin

Ignoro si existe dicha función, pero no es muy difícil de implementar.

Así lo hice yo (cuando daba mis primeros y últimos pasos con Perl):

#!/usr/bin/perl
%meses = (1, "Enero", 2, "Febrero", 3, "Marzo", 4, "Abril", 5, "Mayo", 6, "Junio", 7, "Julio", 8, "Agosto", 9, "Setiembre", 10, "Octubre", 11, "Noviembre", 12, "Diciembre");
$fecha = $ARGV[0];
$fecha_ok = 1;
($dia, $mes, $ano) = split (/\//, $fecha);
use integer;
#if ($ano < 2000 or $ano > 2030) {
# $fecha_ok = 0;
# print "Año fuera de rango\n";
# }
#else {
$bisiesto = (($ano % 4) == 0);
# }
if ($mes < 1 or $mes > 12) {
$fecha_ok = 0;
print "Mes no valido\n";
}

if ($dia < 0 or $dia > 31) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif (($mes == 4 or $mes == 6 or $mes == 9 or $mes == 11) and $dia > 30) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif ($mes == 2 and $dia > 29) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif ($mes == 2 and $dia == 29) {
unless ($bisiesto) {
$fecha_ok = 0;
print "Dia no valido\n";
}
}
if ($fecha_ok) {
print "Hoy es $dia de $meses{$mes} de $ano\n";
print juliano($ano, $mes, $dia);
print "\n";
print 3/4;
print "\n";
}
exit;


sub juliano
{
my($year, $month, $day) = @_;
my($tmp);
# my($secs);

# use Carp;
# confess() unless defined $day;

$tmp = $day - 32075 - 2415019
+ 1461 * ( $year + 4800 - ( 14 - $month ) / 12 )/4
+ 367 * ( $month - 2 + ( ( 14 - $month ) / 12 ) * 12 ) / 12
- 3 * ( ( $year + 4900 - ( 14 - $month ) / 12 ) / 100 ) / 4
;

return($tmp);
}

Si tu rango de fechas está entre 1901 y 2099, funcionará la sencilla sentencia:
$bisiesto = (($ano % 4) == 0);
Si tu rango de fechas es mayor, avisame y lo ampliamos.

Un año es bisiesto si, es divisible por 4, pero no por 100, a menos que sea divisible por 400.
Es decir, 1900 no es bisiesto pero 2000 si.

Suerte
  #3 (permalink)  
Antiguo 14/01/2003, 10:22
 
Fecha de Ingreso: enero-2002
Mensajes: 41
Antigüedad: 22 años, 3 meses
Puntos: 0
Muchas Gracias, creo que eso resuleve perfectamente mi problema
__________________
"Si exagerasemos nuestras alegrías como hacemos con nuestras tristezas, nuestros problemas perderían importancia"
Anatole France
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:39.