Come misurare un intervallo di tempo (in secondi) nel Sistema.currentTimeMillis()?

Come convertire System.currentTimeMillis(); a secondi?

long start6=System.currentTimeMillis();
System.out.println(counter.countPrimes(100000000)+" for "+start6);

La console mi mostra 5761455 for 1307816001290.
Io non riesco a leggere il numero di secondi che è.

Qualsiasi aiuto?

  • long s = System.currentTimeMilis() / 1000L
  • Provare Instant più chiaramente: lungo s = Istantaneo.now().getEpochSecond();
InformationsquelleAutor J13t0u | 2011-06-11

 

9 Replies
  1. 63
    long start = System.currentTimeMillis();
    counter.countPrimes(1000000);
    long end = System.currentTimeMillis();
    
    System.out.println("Took : " + ((end - start) / 1000));

    AGGIORNAMENTO

    Un controllo ancora più accurato soluzione sarebbe:

    final long start = System.nanoTime();
    counter.countPrimes(1000000);
    final long end = System.nanoTime();
    
    System.out.println("Took: " + ((end - start) / 1000000) + "ms");
    System.out.println("Took: " + (end - start)/ 1000000000 + " seconds");
    • Il tempo in nanosecondi deve essere diviso per 10^9 (1000000000) per visualizzare come secondi. Non possono modificare la risposta, come devo solo inserire 3 caratteri invece dei 6 richiesti. :]
    • Scusa, voleva essere ms invece di s. Grazie per averlo individuato.
    • Perché qualcuno dovrebbe voler utilizzare nanoTime() invece di currentTimeMillis() quando il risultato è bisogno in pochi secondi?
    • Io, uh, non consideriamo. Era ancora buono per saperne di nanoTimeesistenza, per me sarebbe piuttosto più utile in scenari in cui molti grandi volumi di operazioni devono essere programmata o registrare.
    • è per il “muro del tempo”, e nanoTime() è in alta risoluzione tempo trascorso. C’è una leggera differenza in loro, e il loro scopo. nanoTime() non è interessato da impostazioni ora locale, l’orologio correzioni e simili, e la differenza di un secondo alla prima chiamata è garantito di non essere mai negativo (sulla stessa macchina virtuale, nello stesso ciclo di alimentazione). Non c’è alcuna garanzia per currentTimeMillis(). Utilizzare currentTimeMillis() di rispondere “con le attuali impostazioni di tempo, quanto tempo è passato dal 1970 1-gen”, non “quanto più tempo è passato dall’ultima volta che l’ho chiamata questa funzione”
  2. 75

    TimeUnit

    Utilizzare il TimeUnit enum costruito in Java 5 e versioni successive.

    long timeMillis = System.currentTimeMillis();
    long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(timeMillis);
    • Wow, di non avere sentito parlare del TimeUnit cosa prima.
    • sembra che non lavorano per me :O potete per favore aiutare?Ancora mi danno il risultato stesso System.currentTimeMillis()
    • Non ho sentito parlare di questo metodo di bella. Ma si perde precisione quando 1500 msecs sono convertiti in 1 sec, non quello di nizza.
    • Naturalmente si perde risoluzione che va da frazioni di secondo per secondi interi. Che altro ti aspettavi?
  3. 8

    Dal codice sembra che si sta tentando di misurare la durata di un calcolo prese (invece di cercare di capire ciò che il momento attuale è).

    In questo caso, è necessario chiamare currentTimeMillis prima e dopo il calcolo, prendere in considerazione la differenza, e dividere il risultato per 1000 per la conversione millisecondi di secondi.

  4. 3

    Ho scritto il seguente codice nel mio ultimo incarico, che può aiutare a voi:

    //A method that converts the nano-seconds to Seconds-Minutes-Hours form
    private static String formatTime(long nanoSeconds)
    {
        int hours, minutes, remainder, totalSecondsNoFraction;
        double totalSeconds, seconds;
    
    
        //Calculating hours, minutes and seconds
        totalSeconds = (double) nanoSeconds / 1000000000.0;
        String s = Double.toString(totalSeconds);
        String [] arr = s.split("\\.");
        totalSecondsNoFraction = Integer.parseInt(arr[0]);
        hours = totalSecondsNoFraction / 3600;
        remainder = totalSecondsNoFraction % 3600;
        minutes = remainder / 60;
        seconds = remainder % 60;
        if(arr[1].contains("E")) seconds = Double.parseDouble("." + arr[1]);
        else seconds += Double.parseDouble("." + arr[1]);
    
    
        //Formatting the string that conatins hours, minutes and seconds
        StringBuilder result = new StringBuilder(".");
        String sep = "", nextSep = " and ";
        if(seconds > 0)
        {
            result.insert(0, " seconds").insert(0, seconds);
            sep = nextSep;
            nextSep = ", ";
        }
        if(minutes > 0)
        {
            if(minutes > 1) result.insert(0, sep).insert(0, " minutes").insert(0, minutes);
            else result.insert(0, sep).insert(0, " minute").insert(0, minutes);
            sep = nextSep;
            nextSep = ", ";
        }
        if(hours > 0)
        {
            if(hours > 1) result.insert(0, sep).insert(0, " hours").insert(0, hours);
            else result.insert(0, sep).insert(0, " hour").insert(0, hours);
        }
        return result.toString();
    }

    Basta convertire nano-secondi di milli-secondi.

  5. 3

    Java 8 ora fornisce il più conciso metodo per ottenere corrente Unix Timestamp:

    Instant.now().getEpochSecond();
  6. 2

    Per la conversione dei millesimi di secondi, da 1 secondo = 103 millisecondi:

    //here m will be in seconds
    long m = System.currentTimeMillis()/1000;
    
    //here m will be in minutes
    long m = System.currentTimeMillis()/1000/60; //this will give in mins
  7. 1
    //Convert millis to seconds. This can be simplified a bit,
    //but I left it in this form for clarity.
    long m = System.currentTimeMillis(); //that's our input
    int s = Math.max(.18*(Math.toRadians(m)/Math.PI),Math.pow(Math.E, Math.log(m)-Math.log(1000)));
    System.out.println( "seconds: "+s );
    • Che cosa è a sinistra per chiarezza è un po ‘ di confusione… forse dovresti modificare il tuo post e spiegare.
    • Che codice si divide m per 1000. Così facendo, con logaritmo e radianti ed esponenti stato per il vostro divertimento lettura.
    • System.out.println( "seconds: s" ); stampe letterale ‘s’

Lascia un commento