pardon , l'eccessiva fretta sempre controproducente !
per chi fosse interessato posto il problema in 2 forme diverse , sottolineando
perchè questo codice non funziona funzionava
codice:
import java.util.GregorianCalendar ;
import java.util.Date ;
public class Main3
{
private Date dataAppuntamentoInizio ;
private Date dataAppuntamentoFine ;
public Main3 ()
{
GregorianCalendar chiama = new GregorianCalendar () ;
chiama.set ( GregorianCalendar.DAY_OF_MONTH , GregorianCalendar.OCTOBER) ;
chiama.set ( GregorianCalendar.HOUR_OF_DAY, 12 ) ;
chiama.set ( GregorianCalendar.MINUTE, 20 ) ;
chiama.set ( GregorianCalendar.SECOND, 10 ) ;
chiama.set ( GregorianCalendar.YEAR, 2011 ) ;
/** è importante capire la differenza tra caricare GregorianCalendar con delle costanti e
* poi ottenere un oggetto modificabile ;
* procedura corretta ; imposto le costanti nel calendario , e dopo ottengo l'oggetto tempo
* con chiama.getTime() ;
*/
dataAppuntamentoInizio = chiama.getTime () ;
dataAppuntamentoFine = chiama.getTime () ;
}
public void setDuration (int minutiDurata) // dipende dall istanza oggetto inizioAppuntamento
{
// ho stabilito che la durata gli arriva in minuti
GregorianCalendar chiama2 = new GregorianCalendar () ;
chiama2.setTime(dataAppuntamentoInizio) ;
int oraInizio = chiama2.get(GregorianCalendar.HOUR_OF_DAY);
int minutoInizio = chiama2.get (GregorianCalendar.MINUTE) ;
int minutiTotali = minutiDurata + minutoInizio ;
chiama2.setTime(dataAppuntamentoFine) ;
if ( minutiTotali <= 60 )
{
chiama2.set(GregorianCalendar.MINUTE , minutiTotali) ;
dataAppuntamentoFine = chiama2.getTime () ; /** chiama2.getTime() riscrive l'oggetto */
/** riscrivo da zero l'oggetto , perchè non posso
modificare delle costanti nel calendario ! */
}
else
{
int oreDiDurata = minutiTotali / 60 ;
int minutiFinali = minutiTotali % 60 ;
int oraFinale = oraInizio + oreDiDurata ;
chiama2.set (GregorianCalendar.HOUR_OF_DAY , oraFinale ) ;
chiama2.set (GregorianCalendar.MINUTE, minutiFinali) ;
dataAppuntamentoFine = chiama2.getTime () ;
System.out.printf( "ore %d\n" ,chiama2.get (GregorianCalendar.HOUR_OF_DAY) ) ;
}
}
public int getDuration ()
{
long msIniziali = dataAppuntamentoInizio.getTime() ;
long msFinali = dataAppuntamentoFine.getTime () ;
long msTotali = msFinali - msIniziali ;
long minutiTotali = ( msTotali / (1000 * 60 ) ) ;
return (int) minutiTotali ;
}
} // fine classe
questa è la versione corretta del mio codice
il problema stava nel fatto che ero convinto di poter modificare delle costanti ( senza saperlo)..
codice:
import java.util.GregorianCalendar ;
public class Main3
{
private GregorianCalendar dataAppuntamentoInizio ;
private GregorianCalendar dataAppuntamentoFine ;
public Main3 ()
{
dataAppuntamentoInizio = new GregorianCalendar (2011, 12 ,12 ,12 , 30 ) ;
dataAppuntamentoFine = new GregorianCalendar (2011, 12 ,12 ,12 , 30 ) ;
}
public void setDuration (int minutiDurata) // dipende dall istanza oggetto inizioAppuntamento
{
// ho stabilito che la durata gli arriva in minuti
int oraInizio = dataAppuntamentoInizio.get (GregorianCalendar.HOUR_OF_DAY);
int minutoInizio = dataAppuntamentoInizio.get (GregorianCalendar.MINUTE) ;
int minutiTotali = minutiDurata + minutoInizio ;
if ( minutiTotali <= 60 )
{
dataAppuntamentoFine.set(GregorianCalendar.MINUTE , minutiTotali) ;
}
else
{
int oreDiDurata = minutiTotali / 60 ;
int minutiFinali = minutiTotali % 60 ;
int oraFinale = oraInizio + oreDiDurata ;
dataAppuntamentoFine.set (GregorianCalendar.HOUR_OF_DAY , oraFinale ) ;
dataAppuntamentoFine.set (GregorianCalendar.MINUTE, minutiFinali) ;
}
}
public int getDuration ()
{
long msIniziali = dataAppuntamentoInizio.getTimeInMillis () ;
long msFinali = dataAppuntamentoFine.getTimeInMillis () ;
int oraInizio = dataAppuntamentoInizio.get (GregorianCalendar.MINUTE);
System.out.printf("\n%d", oraInizio);
long msTotali = msFinali - msIniziali ;
long minutiTotali = ( msTotali / (1000 * 60 ) ) ;
return (int) minutiTotali ;
}
}
questa è una versione che non fa uso di Date
spero che torni utile a qualcuno