PDA

View Full Version : [java] problema con le date


carMAN
22-10-2004, 20:12
Ho scritto questo codice:

...
PianoLavorativo piano=new PianoLavorativo(new Date(104,9,30),new Date(104,10,2));
...


che genera un pianoLavorativo:


...
public PianoLavorativo(Date inizio,Date fine)
{this.inizio=inizio;
this.fine=fine;
for (long g=0;g<giorni_totali();g++)
piano.add(new Giorno(new Date(inizio.getTime()+g*24*60*60*1000)));


for (int hh=0;hh<piano.size();hh++)
{System.out.println(" ------------- "+hh+" "+((Giorno)piano.get(hh)).getData()); }
}//end
...


ma quando eseguo il codice, ottengo questa incoerenza:

------------- 0 Sat Oct 30 00:00:00 CEST 2004

------------- 1 Sun Oct 31 00:00:00 CEST 2004

------------- 2 Sun Oct 31 23:00:00 CET 2004

------------- 3 Mon Nov 01 23:00:00 CET 2004

------------- 4 Tue Nov 02 23:00:00 CET 2004

------------- 5 Wed Nov 03 23:00:00 CET 2004

------------- 6 Thu Nov 04 23:00:00 CET 2004



Perchè viene stampato due volte il 31 ottobre 2004?
cosa signifa CET e CEST?

grazie a coloro che mi aiuteranno
ciao ciao

carMAN
23-10-2004, 10:34
allora?
chi mi aiuta?
è urgente!!! grazie e ciao ciao

kingv
24-10-2004, 20:32
CET -> Central Europe Time
CEST -> Central Europe Summer Time (ovvero quello di prima quando e' in vigore l'ora legale)


A seconda del contesto puo' aver senso considerare il timezone nel tuo codice oppure "forzarne" uno per non avere inconvenienti tipo quello che hai verificato.

carMAN
25-10-2004, 09:07
come faccio a "forzare" il timezone per non avere inconvenienti tipo quello che ho verificato?

kingv
25-10-2004, 09:48
Originariamente inviato da carMAN
come faccio a "forzare" il timezone per non avere inconvenienti tipo quello che ho verificato?


ho detto una c@g@t@.
Puoi forzare il locale quando formatti una data per stamparla (guarda la documentazione di SimpleDateFormat) ma NON e' quella la strada.


il risultato che ottieni infatti è coerente, a un certo punto hai un oggetto Date che rappresenta la mezzanotte del 31 ottobre. Aggiungendo 24 ore a questa data il risultato corretto è un oggetto data che rappresenta le 23:00 del 1 novembre, dato che nella notte tra il 31 ott e il 1 nov c'e' il passaggio ora legale -> solare

Se ottieni un oggetto di Date utilizzando GregorianCalendar non dovresti avere questo problema:

Calendar cal = new GregorianCalendar(2004, Calendar.OCTOBER, 25);
Date oggi = cal.getTime();
cal.add(Calendar.DATE,1);
Date domani = cal.getTime();

ecc.ecc.

carMAN
25-10-2004, 09:57
ti ringrazio per il tuo aiuto
ciao ciao

kingv
25-10-2004, 10:23
Originariamente inviato da carMAN
ti ringrazio per il tuo aiuto
ciao ciao


ma funziona?
hai risolto utilizzando il Calendar?