2017-06-16 1 views
-3

Ich werde gebeten, die Zeit kurz vor dem Start meines Algorithmus und die Zeit, zu der es endet, zu speichern und auch die Differenz zwischen ihnen anzugeben (Endzeit - Startzeit).Gibt es eine kürzere Möglichkeit, eine Zeit in Millisekunden darzustellen?

Aber die System.currentTimeMillis() Funktion generiert Werte, die zu lang sind:

start=1497574732045 
    end=1497574732168 

Gibt es eine Möglichkeit, diesen Wert nur 3 Ziffern wie „123“ zu machen, sondern auch so präzise wie mit der System.currentTimeMillis() Funktion?

+0

** Warum ** sind Sie besorgt über die Anzahl der Ziffern ** und ** nein, betrachten Sie jede Zeit + - 500ms. –

+2

'System.currentTimeMillis()' gibt die Anzahl der Millisekunden seit der Unix-Epoche zurück - Der Unterschied zwischen 'start' und 'end' ist die Anzahl der Millisekunden, die zwischen diesen beiden Punkten verstrichen sind. Sie sollten anfangen, indem Sie "Ende" von "Start" subtrahieren, dann können Sie den Wert als Sekunden formatieren, wenn Sie von dort wollen (obwohl Sie wahrscheinlich mit "0" enden) – MadProgrammer

+0

Sie meinen wie '% 1000'? –

Antwort

1

Wenn Sie die Start- und Endzeiten getrennt speichern müssen, gibt es nur zwei Möglichkeiten (ich kann es mir vorstellen), um die Werte kleiner zu machen.

Erstens, System.currentTimeMillis() gilt ab 1. Januar 1970 UTC. Aber wenn Ihre Uhr nie vor "jetzt" läuft, können Sie eine bestimmte Zeit abziehen. Ich wählte 1497580000000, da es definitiv in der Vergangenheit war, als ich dies schrieb und es eine schöne gerade Zahl ist.

Zweitens, teilen Sie den Wert durch eine beliebige Genauigkeit, die Sie verlieren möchten. In Ihrem Fall möchten Sie vielleicht nicht einmal, aber hier wählte ich 100.

Die zurückgegebenen Zahlen sehen jetzt klein aus, aber sie werden weiter größer, da der Unterschied zwischen der aktuellen Zeit und 1497580000000 deutlicher wird.

Die bevorzugte Lösung ist, nichts davon zu tun, aber speichern Sie einfach den langen Wert, wenn Sie können.

Sie werden nie eine große genaue Zahl in nur 3 Dezimalziffern verzaubern. Nicht ohne Quantenmechanik.

{ 
    long start = 1497584001010L; 
    long end = 1497584008000L; 

    System.out.println("Diff: " + (end - start)); 

    int compactStart = compact(start); 
    int compactEnd = compact(end); 

    System.out.println("Compact Start: " + compactStart); 
    System.out.println("Compact End: " + compactEnd); 

    System.out.println("Diff: " + (expand(compactEnd) - expand(compactStart))); 

} 

private int compact(long millis) { 
    return (int)((millis - 1497580000000L)/100); 
} 

private long expand(int millis) { 
    return (millis + 1497584000000L)*100; 
} 

Ergebnis ...

Diff: 6990 
Compact Start: 40010 
Compact End: 40080 
Diff: 7000 

Note 7000 hat gleich 6990 nicht wegen der absichtlichen Genauigkeitsverlust.

2

als currentTimeMillis() Beschreibung sagt: -

in Millisekunden die aktuelle Zeit zurück. Beachten Sie, dass, während die Zeiteinheit des Rückgabewerts eine Millisekunde ist, die Granularität des Werts vom zugrunde liegenden Betriebssystem abhängt und größer sein kann. Zum Beispiel messen viele Betriebssysteme Zeit in Einheiten von mehreren zehn Millisekunden.

Rückgabe: die Differenz, in Millisekunden gemessen, zwischen der aktuellen Uhrzeit und Mitternacht, 1. Januar 1970 UTC.

in Ihrem Fall verwenden Sie diesen einfachen Trick und Sie erhalten das gewünschte Ergebnis.

Long startTime= Long.parseLong("1497674732168"); 
    Long endTime= Long.parseLong("1497574732168"); 
    System.out.println("start time is"+new Date(startTime)+"end time is"+new Date(endTime)); 
Verwandte Themen