
Originariamente inviata da
LeleFT
Nando, stai confondendo due cose diverse: durata (di un periodo) e informazioni puntuali su un istante nel tempo.
TimeUnit è una classe che modella durate (periodi).
Calendar è una classe che modella istanti nel tempo (a partire dalla EPOCH: 01/01/1970).
Queste istruzioni:
codice:
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(durata);
impostano un istante nel tempo in modo assoluto (in millisecondi) a partire dalla data 01/01/1970 ore 00:00:00 GMT (nota: GMT --> Ovvero le ore 01:00:00 qui da noi [CET]). Passandogli, ad esempio, 66000, quel codice imposta il seguente istante nel tempo:
01/01/1970 01:01:06 CET
Da qui il tuo risultato: stai estraendo i campi ore, minuti e secondi da un istante nel tempo (non da un oggetto che misura periodi/durate). Nota che tale informazione è influenzata da tanti fattori: bisestilità, correzioni temporali, fuso orario di riferimento, ecc, di conseguenza la classe Calendar non è adatta allo scopo.
Quello che vuoi ottenere tu (ovvero, convertire un intervallo temporale espresso in millisecondi nel corrispondente intervallo espresso in ore/minuti/secondi) si fa con semplice aritmetica:
codice:
long durata = 66000; // durata espressa in millisecondi
long ore = durata / (1000 * 60 * 60);
durata -= (ore * 1000 * 60 * 60);
long minuti = durata / (1000 * 60);
durata -= (minuti * 1000 * 60 );
long secondi = durata / 1000;
System.out.println("Ore: " + ore + "; Minuti: " + minuti + "; Secondi: " + secondi);
Ciao.
