Newsgroup: it.comp.lang.perl
Titolo: ***manipolare una data***

Scusate, siete a conoscenza di un modulo che possa permettere di
manipolare una data, ad es sottrarre un giorno tenendo conto del numero
dei giorni di un determinato mese etc?????
Grazie!!!!


Date::Manip
permette di fare tutto quello che chiedi e anche qualcosa in piu' :)
Saluti
-- 
齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,�Enrica Iaffei                     Aggregated Technologies ltd
7, Aristotelous Str.              3, Demetriou Vikella Str.           
1056 Nicosia       CYPRUS         1061 Nicosia       CYPRUS
phone +357 2 346261               +357 2 755750
"Da molti anni non mi chiedo pi�quale posto �la mia casa
 ho scoperto che la mia casa �insieme a me ovunque vada"
齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,虜,齯滌`偕爻,�

 permette di fare tutto quello che chiedi e anche qualcosa in piu' :)
E in ogni caso:
$ONEDAY  = 86400; # Secondi in un giorno
$ONEHOUR = 3600;  # Secondo in un ora
$ONEMIN  = 60;    # Secondi in un minuto
$now    = time;     # ora unix di questo istante
$ieri   = $now-$ONEDAY;  # ora unix di ieri a quest'ora
$domani = $now+$ONEDAY;  # ora unix di domani a quest'ora
$unorafa= $now-$ONEHOUR; # ora unix di un'ora fa
#[...]
# P. Es.
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime ($now);
printf ("Oggi e'  il %2.2d/%2.2d/%4.4d e  sono  le %2.2d:%2.2d:%2.2d\n",
        $mday,$mon+1,$year+1900,$hour,$min,$sec);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime ($ieri);
printf ("Ieri era il %2.2d/%2.2d/%4.4d ed erano le %2.2d:%2.2d:%2.2d\n",
        $mday,$mon+1,$year+1900,$hour,$min,$sec);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime
($now-6*$ONEHOUR);
printf ("Sei ore fa era il %2.2d/%2.2d/%4.4d ed erano le
%2.2d:%2.2d:%2.2d\n",
        $mday,$mon+1,$year+1900,$hour,$min,$sec);
ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

Marco, grazie mille!!!
Una cosa, questo script calcola anche un giorno indietro rispetto al 30 o
31????
Grazie!!!


 31????
La caratteristica principale di questo script e' di non funzionare, mancando
di qualche punto e virgola (;;;;; eccoli, ne fornisco qualcuno in piu'
casomai servissero)
In realta' non voleva essere nemmeno uno script, ma solo un modo per far
vedere come si maneggiano le date.
Il nocciolo della faccenda e' che perl codifica un istante di tempo con il
formato unix.
Cioe' se io faccio.
   $now = time
dentro $now ci va a finire il numero di secondi trascorsi dalla mezzanotte
del primo gennaio 1970 ad ora.
Detto questo e' facile capire che la codifica dell'istante di ieri a
quest'ora e' $now-86400, dato che in un giorno ci sono 86400 secondi;
l'istante di un'ora fa e' codificato come $now-3600, dato che in un'ora ci
sono 3600 secondi, ecc.
Infine, usando la funzione 'localtime' si decodifica l'informazione, cioe'
si tira fuori giorno, mese, anno, ora, minuto, secondo (e altre info)
relativi ad un istante codificato come ora unix.
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (time);
ti dice che giorno, ora, ... ecc. e' in questo istante,
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime
(time-86400);
ti dice le stesse cose relative a ieri a quest'ora
E' evidente che localtime tiene conto automaticamente del numero di giorni
dei mesi, degli anni bisestili, dell'ora legale ecc., quindi ovviamente e'
in grado di dirti che il giorno prima del primo ottobre era il giorno 30
(settembre) e il giorno prima del primo marzo era il 28 (febbraio... o il 29
se l'anno e' bisestile).
Attenzione perche' $mon, che rapresenta il mese, vale 0 per gennaio e 11 per
dicembre.
L'anno e' base 100, cioe' $year vale 99 per il 1999 e 100 per l'anno 2000.
Quindi se si vuole l'anno a 4 cifre bisogna fare $year4 = $year+1900
Il modulo Time::Local mette anche a disposizione la funzione 'timelocal',
che fa un'operazione sostanzialmente inversa a 'localtime', cioe' codifica
l'ora unix partendo dai giorno, mese anno, ecc.
perldoc Time::Local per saperne di piu'.


 perldoc Time::Local per saperne di piu'.
Visto che siamo in tema di moduli consiglio un'occhiata anche a
Date::Parse
Date::Language::Italian
--
Valerio Granato - 
val...@grana.to
FOR KeyMaster - i2000 Usenet Hierarchy
Maggiori informazioni sulla gerarchia i2000?
http://www.i2000.usenet.it
 - 
in...@i2000.usenet.it