Newsgroup: it.comp.java
Titolo: Un ora indietro. (mi serve una grossa cortesia)

Mi son perso in un bicchier d'acqua, ed ho bisogno di un aiuto.
Vorrei semplicemente ottenere l'orario di sistema, ho utilizzato, come ho
letto nel ng, la classe Calendar, ma il risultato e' giusto a meno di un
ora.
Mi spiego: se l'orologio di sistema di windows segna le 22.35, il codice
java mi restituisce 21.35.
All'incirca faccio cosi':
java.util.Locale loc = new java.util.Locale("it","IT");
java.util.Calendar giorno = java.util.Calendar.getIstance(loc);
int ora = giorno.get(giorno.HOUR_OF_DAY);
System.out.println(ora);
che mi da, appunto, l'orologio indietro di un ora.
Ho provato ad usare il TimeZone, settandolo a GMT+01:00, ho provato a
lasciar perdere la classe Locale, ma niente.. sempre in ritardo.
La cosa che poi mi insospettisce e' che eseguendo:
System.out.println(giorno.getTime);
ottengo:
Sun Jun 08 21:29:12 GMT+01:00 2003
anziche' 22.29, come mi sarei aspettato.
Ovvero sembra che sia proprio sballata l'ora all'interno della VM, o che sia
insensibile all'ora legale.
Cosa sbaglio? Qualcuno mi puo' aiutare ad ottenere l'ora corretta? Ringrazio
anticipatamente!

 Mi son perso in un bicchier d'acqua, ed ho bisogno di un aiuto.
il fatto č che probabilmente l'ora del tuo bios č in GMT, ovvero ora di
Greenwitch. Quindi č giusta l'ora che ti restituisce. L'ora locale la
ottieni sommando l'ora restituita con il +1.00 che vedi nella stessa riga.
Non chiedermi come, perņ...
Raffaele
-- 
Raffaele Castagno
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Greenwitch.
Eppure non capisco.. l'orologio del pc segna l'ora correttamente.
Ed e' anche vero che (ho provato ora) tutte le applet-orologio che si
trovano in giro, ad esempio su 
html.it
, segnano l'ora sbagliata.
Sembra sia la virtual machine ad essere sfasata. Come mai? Ed esiste un modo
per risistemarla?
Ripeto: l'ora del pc e' corretta, ed e' corretto anche il "fuso orario"
(ROMA), quindi... non capisco davvero.

 (ROMA), quindi... non capisco davvero.
l'ora di windows oppure l'ora dal bios?


 l'ora di windows oppure l'ora dal bios?
windows, quella del bios in effetti devo controllarla.
Ma quando setto con windows un'ora, automaticamente non viene anche
sincronizzato il bios?

 sincronizzato il bios?
Semmai avviene il contrario. Quando si aggiorna l'ora del bios viene
aggiornata anche quella di windows, non il contrario.


 aggiornata anche quella di windows, non il contrario.
Ad ogni modo, ho verificato: bios e windows hanno il medesimo orario,
corretto.
Java continua invece a darmi un'ora in meno.
Sembra quasi non consideri l'ora locale.
Boh...

   Grecia, NON usa automaticamente l'ora legale.
E anche questo non mi torna: ho GMT +01:00, me lo stampa anche java.
Non so piu' cosa pensare.. bug della jdk 1.4.1? Possibile sia l'unico ad
essersene accorto?

 insensibile all'ora legale.
infatti dovrebbe dare: 22:29:12 GMT+02:00 (oppure CEST). Inserisci la 
data in un caledario e stampati calendario e time zone. Di default 
vengono stampate tutte le proprietą degli oggetti. Dovrebbe essere 
impostata una proprietą "usingDaylight=true".
Comunque a me l'applet funziona correttamente. Testato con:
Windows 2000 Professional SP2
JRE 1.4.1_01
Mozilla 1.4 RC1
Internet Explorer 6
Gaetano

 Non so piu' cosa pensare.. bug della jdk 1.4.1?
No, perche', come hai detto tu, un altro PC stampa l'ora corretta.
Quindi e' un problema di configurazione del tuo PC.
Compila ed esegui il seguente programma:
import java.util.*;
class A40 {
  public static void main(String[] args) {
    Locale loc = Locale.ITALIAN;
    Calendar cal = Calendar.getInstance(loc);
    TimeZone tz = cal.getTimeZone();
    int ora = cal.get(Calendar.HOUR_OF_DAY);
    int min = cal.get(Calendar.MINUTE);
    int sec = cal.get(Calendar.SECOND);
    int dst = cal.get(Calendar.DST_OFFSET);
    int z = cal.get(Calendar.ZONE_OFFSET);
    System.out.println(""+ora+":"+min+":"+sec);
    System.out.println(""+dst+" "+z);
    System.out.println(tz.getDisplayName(true, TimeZone.SHORT));
    System.out.println(tz.getDisplayName(false, TimeZone.SHORT));
  }
}
Se ti stampa qualcosa del tipo seguente allora tutto e' OK:
xx:xx:xx Tue Jun 10 xx:xx:xx CEST 2003
3600000 3600000
CEST
CET
Se invece ti stampa qualcosa del tipo:
xx:xx:xx Tue Jun 10 xx:xx:xx GMT+01:00 2003
0 3600000
GMT+01:00
GMT+01:00
  allora vuol dire che sul tuo PC non hai settato l'ora legale.
  Cioe' se vai sul pannello di controllo
  scegli Date&Time e poi TimeZone
  vedrai che non hai nessun fregno sulla casellina
  "Automatically adjust clock for daylight saving changes".
  Questa casellina DEVE avere un fregno.
  Se non ce l'ha mettilo e poi, subito dopo,
  risetta l'ora del tuo computer (perche' mettere il fregno
  cambiera' l'ora del tuo computer).
Se invece la stampa del programmino sopra non e' nessuna
delle due che ti ho proposto allora posta qui
cosa stampa il programma e vedremo di capirci qualcosa.


 ha scritto nel messaggio
news:oprqjsk9...@127.0.0.1...
Grazie infinitissime.
Era quello dell'ora legale non fregnata :).

> aggiornata anche quella di windows, non il contrario.
per quello che ricordo io anche il contrario.
L'unico che fa un uso "intelligente" (A MIO GIUDIZIO) dell'ora del BIOS
é Linux
dove tu setti il bios con GMT e lui ti visualizza l'ora giusta secondo
il fuso orario.
Comunque l'ora che vedi con windows é l'ora che hai sul BIOS.
Ni hao, Lelle.