Newsgroup: it.comp.lang.perl
Titolo: Ecco come recuperare la data italiana

Ho trovato il codice corretto, eccolo qui:
  $hours = "+9";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=(localtime(time +
(3600*$hours)));
  if ($sec < 10)   {$sec = "0$sec";}
  if ($min < 10)   {$min = "0$min";}
  if ($hour < 10) {$hour= "0$hour";}
  if ($mday < 10) {$mday= "0$mday";}
  if ($mon++ < 10) {$mon = "0$mon"; }
  $year += 1900;
Praticamente aggiunge o rimuovere il fuso specificato in $hours dall'ora/data
del server.
Trovandosi il server in America...
A questo punto $sec $min $hour contengono secondi, minuti, ore; $mday $mon $year
contengono giorno mese anno.
Un altro grande mistero č stato svelato a favore dell'umanitą intera.
Un ringraziamento a tutti e un "Scusa" particolare a Maurizio.
Ciao a tutti!
--
Umberto Meroni
[
http://www.ubi1k.com
] [
http://www.ubi1k-vb.net
]
[
webm...@ubi1k.com
] [ICQ: 14660006]
[MSN Messenger: 
ub...@hotmail.com
]
[per contattarmi: 
http://www.ubi1k.com/meroni
]

 wrote in message
Pine.LNX.4.10.991204...@c64.comm2000.it...
On Sat, 4 Dec 1999, Umberto Meroni wrote:
C'è un piccolo bug, nel codice sotto.


direi un Millenium Bug, non bisogna aggiungere in maniera fissa 1900, io
srisolvo il problema in questo modo, correggimi se sbaglio ho dammi una
solzione più brillante.. ti ringrazierò...
if( $year > 29) {
    $year+=1900;
}
else {
    $year+=2000;
}
risolvo i problemi fino al 2029 ... basta per ora... alla prossima...

risolvo i problemi fino al 2029 ... basta per ora... alla prossima...
COme scritto sopra non risolvi niente.
Ciao
Andrea Busia
No Spam, Grazie.

 
No, il valore restituito da localtime() è proprio il numero di anni
trascorsi dal 1900 (che fino al prossimo 31 dicembre, guarda caso,
coincide esattamente con l'anno espresso a due cifre). Aggiungere 1900 va
bene ed è sufficiente. Non era quello il bug. :-)
Max

   if ($mon++ < 10) {$mon = "0$mon"; }
Ma non sarebbe meglio
    if (++$mon < 10) {$mon = "0$mon"; }
?
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)



Max
decisamente grazie a Max e Andrea, ma essendo un neofita Perl non credevo
che essendo Y2K ready, il local time ritornasse nell 2000 il valore 100 e
non 99...
imparerò di sicuro ogni giorno qualcosa di nuovo... grazie sarò lieto di
chiedervi altri aiuti...

E' uguale mettere ++ prima o dopo (o almeno, a me risulta cosě).


 
Mmmm.....
Allora procediamo in modo... maieutico.
Umberto, qual è la differenza tra $c++ e ++$c ?
Se capisci qual è la differenza, capisci perchè quel codice è sbagliato.
Il fatto che in questo periodo dell'anno produca l'effetto desiderato, non
è sufficiente per affermare che sia esente da bug. ;-)
 
Max

Ho appena controllato su "Programmare in PERL", ditemi voi se sbaglio.
Qua a pg.15 in fondo c'è una tabella di questo tipo:
ESEMPIO    FUNZIONE  RISULTATO
++$a, $a++          Autoincremento     Aggiungi 1 a $a
--$a, $a--           Autodecremento    Sottrai 1 a $a
Non è lecito dedurre che ++$a e $a++ producano lo stesso risultato?


 E' uguale mettere ++ prima o dopo (o almeno, a me risulta così).
Ti risulta male...
[root@fokhouse /tmp]# cat 
prova.pl
#!/usr/bin/perl -w
$mon_c = $mon_s = 9;
if ($mon_s++ < 10) { $mon_s = "0$mon_s"; }
if (++$mon_c < 10) { $mon_c = "0$mon_c"; }
print "Il codice SCORRETTO dà come risultato $mon_s\n";
print "Il codice CORRETTO dà come risultato $mon_c\n";
[root@fokhouse /tmp]# ./
prova.pl
Il codice SCORRETTO dà come risultato 010
Il codice CORRETTO dà come risultato 10
[root@fokhouse /tmp]#


 
Il side-effect è lo stesso, non il valore restituito dall'espressione (ed 
è quest'ultimo che determina il risultato dell'espressione booleana).
Prova questo:
	$a = 10; $b = 10;
	print $a++, " ", ++$b, "\n";
	print $a, " ", $b, "\n";
Max

Non è lecito dedurre che ++$a e $a++ producano lo stesso risultato?
E` lecito fino ad un certo punto. ;-) Di fatto $a++ PRIMA utilizza
il valore nell'espressione in cui e` inserito e POI lo incrementa.
Ad esempio:
$a=10;
print $a++;
scrive "10", ma poi $a vale 11.
++$a fa il contrario, cioe' PRIMA incrementa il valore di $a, e poi
utilizza nell'espressione il contenuto della variabile. Esempio:
$a=10;
print ++$a;
scrive "11".
	Michele.
-- 
Michele Beltrame
mi...@io.com
http://www.io.com/~mick/

Ne deduco che il codice corretto dunque è:
  $ORE = "+9";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=(localtime(time +
(3600*$ORE)));
  if ($sec < 10)   {$sec = "0$sec";}
  if ($min < 10)   {$min = "0$min";}
  if ($hour < 10) {$hour= "0$hour";}
  if ($mday < 10) {$mday= "0$mday";}
  if (++$mon < 10) {$mon = "0$mon"; }
  $year += 1900;
  $ggmmaaaa = "$year$mon$mday";
Giusto?


 del server.
Personalmente faccio riferimento al gmtime ed aggiungo 1 ora, in questo modo
dovrebbe funzionare indipendentemente da dove si trova il server.
Avevo provato anche a modificare la variabile d'ambiente TZ ma poi ho letto
che non era un metodo affidabile.
Saluti,
Roan

dovrebbe funzionare indipendentemente da dove si trova il server.
Ma di estate devi aggiungerne due... ;)
	Michele.
-- 
Michele Beltrame
m...@io.com
http://www.io.com/~mick/