Frage Wie misst man die Zeitspanne in Sekunden mit System.currentTimeMillis ()?


Wie konvertiert man? System.currentTimeMillis(); zu Sekunden?

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

Die Konsole zeigt mir 5761455 for 1307816001290. Ich kann nicht lesen, wie viele Sekunden das sind.

Irgendeine Hilfe?


39
2018-06-11 18:27


Ursprung


Antworten:


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

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

AKTUALISIEREN

Eine noch genauere Lösung wäre:

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

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

58
2018-06-11 18:30



TimeUnit

Benutze die TimeUnit  enum in Java 5 und später eingebaut.

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

65
2018-06-12 00:32



so:

(int)(milliseconds / 1000)

14
2018-06-11 19:04



Aus Ihrem Code scheint es, dass Sie versuchen zu messen, wie lange eine Berechnung dauerte (im Gegensatz zu dem Versuch herauszufinden, was die aktuelle Zeit ist).

In diesem Fall müssen Sie anrufen currentTimeMillis Nehmen Sie vor und nach der Berechnung die Differenz und teilen Sie das Ergebnis durch 1000, um Millisekunden in Sekunden zu konvertieren.


7
2018-06-11 18:31



Ich habe den folgenden Code in meiner letzten Aufgabe geschrieben, es kann Ihnen helfen:

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

Konvertieren Sie einfach Nanosekunden in Millisekunden.


3
2018-06-11 20:08



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

2
2017-07-18 09:24



Java 8 bietet jetzt die präziseste Methode, um den aktuellen Unix-Zeitstempel zu erhalten:

Instant.now().getEpochSecond();

2
2017-11-29 10:45