Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    12

    Trasformare durata in millisecondi in ore, minuti e secondi

    Salve a tutti! Come da titolo, ho una durata in millisecondi che vorrei trasformare nel formato ore minuti secondi.
    Ho provato così
    codice:
    Calendar cal = new GregorianCalendar();
    cal.setTimeInMillis(durata); 
    int ore = cal.get(Calendar.HOUR); 
    int minuti = cal.get(Calendar.MINUTE); 
    int secondi = cal.get(Calendar.SECOND);
    ma non dà il risultato sperato, se confrontato con la durata espressa solo in secondi, che invece è corretta.
    Mi spiego meglio: l'output di questo codice
    codice:
    long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(durata);System.out.println("Durata: "+timeSeconds+" secondi.");
    System.out.println("Durata: "+ore+" ore "+minuti+" minuti "+secondi+" secondi.");
    E' questo:
    codice:
    Durata: 66 secondi.
    Durata: 1 ore 1 minuti 6 secondi.
    C'è un'ora di troppo, perchè? Dove sbaglio? Grazie anticipatamente

  2. #2
    http://stackoverflow.com/a/9027379


    e risposte susseguenti a questa ci sono vari esempi
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    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.
    Ultima modifica di LeleFT; 25-09-2015 a 10:35
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    12
    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!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.