Quote Originariamente inviata da LeleFT Visualizza il messaggio
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.
Pensavo ci fosse qualcosa di meno "macchinoso", comunque ora mi è perfettamente chiaro, grazie infinite!!!