Comment mesurer la durée d'un temps en secondes à l'aide System.currentTimeMillis ()?

StackOverflow https://stackoverflow.com/questions/6317750

  •  26-10-2019
  •  | 
  •  

Question

Comment convertir System.currentTimeMillis(); en secondes?

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

Les spectacles de la console me 5761455 for 1307816001290. Je ne peux pas lire combien de secondes est.

Toute aide?

Était-ce utile?

La solution

long start = System.currentTimeMillis();
counter.countPrimes(1000000);
long end = System.currentTimeMillis();

System.out.println("Took : " + ((end - start) / 1000));

UPDATE

Une solution encore plus précise serait:

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");

Autres conseils

TimeUnit

Utilisez le TimeUnit < a href = "https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html" rel = "noreferrer"> ENUM intégré dans Java 5 et versions ultérieures.

long timeMillis = System.currentTimeMillis();
long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(timeMillis);

comme ceci:

(int)(milliseconds / 1000)

A partir de votre code, il semble que vous essayez de mesurer combien de temps un calcul a pris (par opposition à essayer de comprendre ce que l'heure actuelle est).

Dans ce cas, vous devez appeler currentTimeMillis avant et après le calcul, prendre la différence, et diviser le résultat par 1000 pour convertir millisecondes en secondes.

Java 8 fournit maintenant la méthode la plus concise pour obtenir en cours Unix Timestamp:

Instant.now().getEpochSecond();

J'ai écrit le code suivant dans ma dernière affectation, il peut vous aider:

// 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();
}

Il suffit de convertir des nano-secondes à milli-secondes.

TimeUnit.SECONDS.convert(start6, TimeUnit.MILLISECONDS);

Pour la conversion des millisecondes en secondes, depuis le 1 seconde = 10³ millisecondes:

//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
// 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 );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top