• Publicidad

Rango de fechas en Perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Rango de fechas en Perl

Notapor alperez » 2019-04-22 08:17 @387

Hola.

Una duda que me ha surgido y que no sé muy bien cómo implementar a la hora de tener un rango de fecha y hora para filtrar qué procesos están en ese rango y quedarme sólo con ellos sin tener en cuenta cuándo hay un cambio de día, de mes o de año. Más o menos tengo lo siguiente sacado.

1- Recibo de un json un dato de fecha StarTime: 2019-04-18T16:00:00.000Z

2- Obtengo la hora de ejecución actual del script con el comando date: "`date +"%Y-%m-%d/%H:%M:%S"`;" que me gustaría saber si se puede obtener directamente en Perl el mismo comando: 2019-04-22/15:15:42

3- Obtengo 15 minutos hacia atrás de la hora de ejecución "`date --date='15 min ago' +"%Y-%m-%d/%H:%M:%S"`;" que me gustaría saber si se puede obtener también con Perl: 2019-04-22/15:00:54

Por último y con estos tres datos necesito saber si la fecha de startime está en el rango de [hora 15 minutos atrás] [starttime] [hora actual de ejecución].

¿Existe algún procedimiento para poder sacar estos datos si tener que hacer muchas consultas de if()?

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Publicidad

Re: Rango de fechas en Perl

Notapor explorer » 2019-04-22 18:00 @791

Para obtener la fecha (local) actual, puedes usar localtime (perldoc -f localtime):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
> perl -E 'use POSIX "strftime"; say strftime "%Y-%m-%d/%H:%M:%S", localtime'
2019-04-23/00:03:44
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Si quieres saber la fecha de hace 15 minutos, pues tenemos que restarlo de la fecha actual:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
> perl -E 'use POSIX "strftime"; say strftime "%Y-%m-%d/%H:%M:%S", localtime'
2019-04-23/00:05:08
> perl -E 'use POSIX "strftime"; say strftime "%Y-%m-%d/%H:%M:%S", localtime(time - 900)'
2019-04-22/23:50:08
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora bien... cuando se trata de realizar operaciones, es más fácil si podemos trasladarlas a... un número. En este caso, el número de segundos que han pasado desde el epoch:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.26;                              # queremos características modernas
  3. use utf8;                               # el código contiene caracteres en utf8
  4. use open IO => qw':utf8 :std';          # las entradas y salidas en UTF8. También las E/S estándar
  5. use Time::Local;
  6.  
  7. my $fecha_archivo = "2019-04-23T01:04:00.000Z";
  8. if ($fecha_archivo =~ /(?<año>\d{4})-(?<mes>\d{2})-(?<día>\d{2})T(?<hora>\d{2}):(?<minutos>\d{2}):(?<segundos>\d{2})/) {
  9.  
  10.     # calculamos la fecha epoch
  11.     my $time_archivo = timelocal($+{segundos}, $+{minutos}, $+{hora}, $+{día}, $+{mes}-1, $+{año});
  12.  
  13.     #say $time_archivo;
  14.     #say time;
  15.  
  16.     my $diferencia = time - $time_archivo;
  17.     #say time-$time_archivo;
  18.  
  19.     if ($diferencia < 900) {
  20.         say "Está dentro del cuarto de hora";
  21.     }
  22.     else {
  23.         say "Es demasiado viejo";
  24.     }
  25. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Con una simple resta, sabemos si estamos dentro del cuarto de hora.
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: Rango de fechas en Perl

Notapor alperez » 2019-04-23 05:52 @286

Hola, explorer, muchas gracias. ¡¡Perfecto!! Es mucho mejor pasarlo todo a segundos y realizar el cálculo con las fechas en formato epoch.

Lo único que para sacar los segundos de una fecha he utilizado una función que se llama "str2time". ¿Sería correcto?
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Rango de fechas en Perl

Notapor explorer » 2019-04-23 14:28 @644

No sé qué función es esa, pero si te funciona, pues adelante.

(Cuidado no te confunda la posición de los meses y los días, ya sabes que las fechas en inglés invierte la posición con respecto a las fechas en español).
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


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados