• Publicidad

Error Date::Manip

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Error Date::Manip

Notapor Lor » 2011-05-22 09:02 @418

Les agradecería muchísimo si me ayudasen con lo siguiente:

Quiero, a la fecha y hora actual, sumarle 1 día, y noto que puede haber un error en el módulo Date::Manip cuando la parte de segundos va desde 00 a 09.

Si hago lo siguiente en un tiempo entre %H:$M:10 a %H:$M:60 todo anda CORRECTO, pero si el tiempo actual coincide con segundos en el rango %H:$M:00 a %H:$M:09 no devuelve ningún resultado, cadena vacía.

my ($sec, $min, $hour ,$mday ,$mon ,$year) = localtime(time);
$year += 1900;
$mon++;

my $now= "$year-$mon-$mday $hour:$min:$sec";
my $now_parse = ParseDate($now);

my $now_mas24hs = DateCalc( $now_parse, "+1 days");
my $vto = UnixDate($now_mas24hs,"%Y-%m-%d %H:%M:%S" );

Obtengo $vto en el primer caso y no en el segundo.

¡¡¡¡¡¡¡¡¡Gracias!!!!!!!!!
Última edición por explorer el 2011-05-22 11:18 @512, editado 1 vez en total
Razón: Tildes, admiraciones
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Re: Error Date::Manip

Notapor explorer » 2011-05-22 12:11 @549

El problema está a la hora de interpretar la fecha que le pasas a ParseDate().

Cuando estás en segundos menores que diez, la fecha tiene este aspecto: 2011-5-22 18:29:8

Y resulta que no es un formato de fecha (mejor dicho, de hora) reconocido por Date::Manip (ver la sección VALID TIME FORMATS de Date::Manip::Date).

La solución pasa por darle un formato correcto a los segundos, antes de pasarlos a ParseDate.
$sec = substr "0$sec", -2;

De todas maneras, no necesitas "interpretar" la fecha actual... Date::Manip tiene muchas formas de representar ciertas fechas y horas.

Con lo siguiente, tienes la fecha de ahora mismo:

my $ahora = ParseDate("now");

Ahora tienes un objeto Date::Manip que representa la fecha y la hora local del sistema en que estés.

Para saber qué fecha y hora serán dentro de 24 horas, hay varias formas de hacerlo, pero la más normal es parecida a la que muestras:

my $ahora_mas_24h = DateCalc( $ahora, "+1 days");

Es más, incluso si no vas a necesitar el objeto $ahora más que en esa ocasión, puedes pedirle a DateCalc que realice el cálculo de forma directa:

my $ahora_mas_24h = DateCalc( "now", "+1 days");

Piensa que si debes realizar varias operaciones con fechas y horas, antes de ejecutar alguna función de Date::Manip, seguro que lo estás haciendo mal y que no has leído bien su documentación.

En Date::Manip existe también la palabra "tomorrow" para representar el día de mañana, pero no te vale, porque solo es la parte de la fecha.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Error Date::Manip

Notapor Lor » 2011-05-22 15:58 @707

¡¡¡¡¡Muy claro y correcto!!!!!
Última edición por explorer el 2011-05-22 16:01 @709, editado 1 vez en total
Razón: Poner caracteres '¡'
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado