Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Módulos » Error Date::Manip  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 3 mensajes ] 
 
Nota 2011-05-22 09:02 @418

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Error Date::Manip
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
Tildes, admiraciones


Nota 2011-05-22 12:11 @549
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Error Date::Manip
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


Nota 2011-05-22 15:58 @707

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Error Date::Manip  RESUELTO
¡¡¡¡¡Muy claro y correcto!!!!!


Última edición por explorer el 2011-05-22 16:01 @709, editado 1 vez en total
Poner caracteres '¡'


Responder al tema  [ 3 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO