• Publicidad

Fechas en perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Fechas en perl

Notapor Reina » 2008-04-25 08:15 @385

Buenas tardes:

Necesito realizar un script con perl que me coja la fecha actual y me la compare con la última fecha de actualización del antivirus.

El script en cuestión lo tengo pero hecho en java y no sé cómo se trabaja con fechas en perl.

¿Alguien me puede ayudar o recomendarme algún manual para tontos ;p?

Gracias!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Publicidad

Notapor monoswim » 2008-04-25 12:00 @542

Colocá la palabra fechas en el buscador de este foro, encontrarás cosas como

viewtopic.php?t=652

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor kidd » 2008-04-25 12:04 @545

Yo el módulo que uso para realizar comparaciones de fecha es Date::Calc.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2008-04-25 13:40 @611

Bienvenido a los foros de Perl en Español, Reina.

Para obtener la fecha del sistema puedes usar la función time(). Y para saber la fecha del fichero antivirus, puedes usar la función stat().

Las dos funciones te devolverán la fecha en forma de segundos desde el epoch. Pero eso a ti no te importa, en valores absolutos. Solo te interesa su diferencia.

Así, con (stat('antivirus.dat'))[9] <=> time() te devolverá -1, 0 y 1 según el fichero antivirus.dat sea más viejo, igual, o más joven que la fecha actual. Si lo que quieres es saber cuánto, entonces sí que habrá que hacer la diferencia: time() - (stat('antivirus.dat'))[9].
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

Notapor Reina » 2008-04-28 03:51 @202

Buenos días explorer:

Muchas gracias por tu bienvenida, la verdad es que cuando una es nueva en este mundillo y no sabe muy bien cómo moverse se agradecen los detalles.

Bueno, te escribo primero para decirte que tu ayuda de momento me está sirviendo, pero necesito un poco más de tus conocimientos :)

Este es el script que estaba haciendo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$ultactantivirus=(stat('dinfo.dat'))[9];
$fechaactual=time();
$comparacion=(stat('dinfo.dat'))[9]<=>time();
$resultado=time()-(stat('dinfo.dat'))[9];
print "$ultactantivirus,$fechaactual,$comparacion,$resultado";
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


y este es el resultado que me genera:
Código: Seleccionar todo
, 1209372423, -1, 1209372423


Como verás, intento visualizar la fecha de actualización del antivirus y no me saca nada, la fecha actual coincide con lo denominado resultado y no es posible, y lo único que está bien es la comparación, ya que tuvo lugar el viernes pasado y por eso devuelve un -1.

Podrías ayudarme por favor? Además de lo que quiero visualizar, me gustaría que me dijera cuántos días hace que se hizo la última actualización del antivirus.

Estoy segura de que es una tontería, pero... llevo un rato peleándome y no consgigo nada.

Gracias de antemano.

Besitos!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor kidd » 2008-04-28 08:57 @415

Hola,

Haciendo uso del módulo Date::Calc podemos lograr lo que tu quieres de manera sencilla:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use warnings;
use strict;
use Date::Calc qw( Today_and_Now Delta_DHMS Date_to_Text Date_to_Text_Long Language Time_to_Date );

Language(4); #Cambiamos el idioma de Date::Calc a Español: 4

my $ultactantivirus=(stat('dinfo.dat'))[9];

print ultima_actualizacion($ultactantivirus);


sub ultima_actualizacion{

    my $fecha = shift;

    my @fecha_i = Time_to_Date($fecha);

    my @fecha_e = Time_to_Date(time);

    #Tomamos el intervalo entre ambas fechas
    my ($Dd,$Dh,$Dm,$Ds) = Delta_DHMS(@fecha_i, @fecha_e);

    #Regresamos el formato correcto
    if( $Dd && $Dd > 31 ){
        return Date_to_Text(@fecha_i[0..2]);
    }
    elsif( $Dd && $Dd < 31 ){
        return "Hace $Dd " . ( $Dd > 1 ? "días" : "día" );
    }
    elsif( $Dh && $Dh < 24 ){
        return "Hace $Dh " . ( $Dh > 1 ? "horas" : "hora" );
    }
    elsif( $Dm && $Dm < 60 ){
        return "Hace $Dm " . ( $Dm > 1 ? "minutos" : "minuto" );
    }
    elsif( $Ds && $Ds < 60 ){
        return "Hace $Ds " . ( $Ds > 1 ? "segundos" : "segundo" );
    }
    else{
        return Date_to_Text(@fecha_i[0..2]);
    }

} #sub ultima_actualizacion
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Realizas la llamada a la función ultima_actualizacion() enviando la fecha que deseas comparar con la fecha actual como único argumento. La función te regresará resultados como:

Código: Seleccionar todo
Hace 5 segundos
Hace 15 minutos
Hace 1 día
...etc


Si la fecha es mayor a 31 días, entonces regresará el texto de la fecha que fue enviada a la función.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Reina » 2008-04-28 09:12 @425

Buenas tardes Kidd:

Muchas gracias por tu ayuda, pero cuando intento ejecutar el código en la consola me da error en estas dos líneas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Date::Calc qw( Today_and_Now Delta_DHMS Date_to_Text Date_to_Text_Long Language Time_to_Date );

Language(4);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Sabes a qué se puede deber?

Gracias por todo.

Besitos!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor Rene Serrano » 2008-04-28 10:14 @468

Lo más seguro es que tiene que instalar ese módulo; dependiendo de tu S.O hay maneras de instalarlo. Si estás en Windows, desde la consola de ActivePerl.

Saludos
------------
¦23n3
Rene Serrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2006-11-27 12:35 @565
Ubicación: El salvador CA

Notapor kidd » 2008-04-28 14:58 @665

Sin ver el mensaje de error, como dice René, lo más seguro es que el problema sea que no tienes el módulo Date::Calc instalado en tu distribución de Perl.

Si tienes Windows con el ActivePerl entonces lo puedes instalar de manera sencilla usando el ppm:
http://perlenespanol.com/tutoriales/mod ... pmexe.html

En caso de que tengas un sistema tipo *nix entonces lo puedes hacer por medio del comando cpan.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2008-04-28 19:12 @841

Reina escribiste:Este es el script que estaba haciendo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$ultactantivirus=(stat('dinfo.dat'))[9];
$fechaactual=time();
$comparacion=(stat('dinfo.dat'))[9]<=>time();
$resultado=time()-(stat('dinfo.dat'))[9];
print "$ultactantivirus,$fechaactual,$comparacion,$resultado";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y este es el resultado que me genera:
Código: Seleccionar todo
, 1209372423, -1, 1209372423
Si la función stat('dinfo.dat') no devuelve ningún resultado es porque ese fichero no existe en el directorio donde está trabajando tu programa Perl.

Prueba a poner el camino completo. Por ejemplo stat('C:/Archivos de programa/Antivirus/dinfo.dat').
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

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron