364 Stimmen

Wie kann ich in Java die verstrichene Zeit messen?

Ich möchte so etwas haben:

public class Stream
{
    public startTime;
    public endTime;

    public getDuration()
    {
        return startTime - endTime;
    }
}

Außerdem ist es wichtig, dass z.B. bei einer Startzeit von 23:00 und einer Endzeit von 1:00 eine Dauer von 2:00 erreicht wird.

Welche Typen sind zu verwenden, um dies in Java zu erreichen?

8voto

Peter Lawrey Punkte 511323

Es ist erwähnenswert, dass

  • System.currentTimeMillis() hat bestenfalls eine Genauigkeit von einer Millisekunde. Auf einigen Windows-Systemen kann sie 16 ms betragen. Es hat eine geringere Kosten, die Alternativen < 200 ns.
  • System.nanoTime() ist auf den meisten Systemen nur auf Mikrosekunden genau und kann auf Windows-Systemen um 100 Mikrosekunden springen (d. h. manchmal ist es nicht so genau, wie es scheint)
  • Der Kalender ist eine sehr teure Art, die Zeit zu berechnen. (Ich kann denken, abgesehen von XMLGregorianCalendar) Manchmal ist es die am besten geeignete Lösung, aber bewusst sein, sollten Sie nur Zeit lange Intervalle.

7voto

Andreas Dolk Punkte 110776

Java bietet die statische Methode System.currentTimeMillis() . Und das gibt einen langen Wert zurück, ist also eine gute Referenz. Viele andere Klassen akzeptieren einen Parameter "timeInMillis", der ebenfalls lang ist.

Und viele Leute finden es einfacher, die Joda Zeit Bibliothek zur Berechnung von Daten und Zeiten.

6voto

OscarRyz Punkte 189898

Welche Typen sind zu verwenden, um dies in Java zu erreichen?

Antwort : lang

public class Stream {
    public long startTime;
    public long endTime;

    public long getDuration() {
        return endTime - startTime;
    }
    // I  would add
    public void start() {
        startTime = System.currentTimeMillis();
    }
    public void stop() {
         endTime = System.currentTimeMillis();
     }
}

Verwendung:

  Stream s = .... 

  s.start();

  // do something for a while 

  s.stop();

  s.getDuration(); // gives the elapsed time in milliseconds. 

Das ist meine direkte Antwort auf Ihre erste Frage.

Für die letzte "Note" würde ich Ihnen Joda Time empfehlen. Es enthält eine Intervall Klasse, die für Ihre Bedürfnisse geeignet ist.

3voto

James McMahon Punkte 46733

Wenn Sie es vorziehen, die Java-Funktion Kalender-API können Sie dies versuchen,

Date startingTime = Calendar.getInstance().getTime();
//later on
Date now = Calendar.getInstance().getTime();
long timeElapsed = now.getTime() - startingTime.getTime();

3voto

David Bliss Punkte 361

Wenn Sie eine Anwendung schreiben, die mit Zeitdauern umgehen muss, dann werfen Sie bitte einen Blick auf Joda-Time, das eine Klasse speziell für die Handhabung von Zeitdauern hat, Intervalle und Zeiträume. Ihr getDuration() Methode sieht so aus, als könnte sie ein Joda-Zeitintervall zurückgeben:

DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);

public Interval getInterval() {
    Interval interval = new Interval(start, end);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X