2016-05-16 15 views
1

Ich möchte die Gesamtlaufzeit meines Programms von Anfang bis Ende berechnen und Laufzeit in JFrame aktualisieren, aber wenn ich mein Programm ausführen, bekomme ich über 70 Jahre, 1 Tag und 2 Stunden. Warum ? Was falsch?So berechnen Sie die Laufzeit

private void setMachineTime(){ 
    Timer timer = new Timer(); 
    long startTime = new Date().getTime(); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      long endTime = new Date().getTime(); 
      long diffTime = endTime - startTime ; 
      String time = new SimpleDateFormat("yy:mm:dd:HH:mm:ss").format(diffTime); 
      System.out.println(time); 
     } 
    }, 0, 1000); 
} 

actual result

UPD: schrieb ich Code mit meinem eigenen Format Zeitverfahren. Jetzt habe ich was ich will. Danke an euch alle.

private void setMachineTime(){ 
    Timer timer = new Timer(); 
    long startTime = new Date().getTime(); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 

      long endTime = new Date().getTime(); 
      long diffTime = endTime - startTime; 
      String diffSeconds = formatTime(diffTime/1000 % 60); 
      String diffMinutes = formatTime(diffTime/(60 * 1000) % 60); 
      String diffHours = formatTime(diffTime/(60 * 60 * 1000) % 24); 
      System.out.println(diffHours + ":" + diffMinutes + ":" + diffSeconds); 
     } 
    }, 0, 1000); 
} 

private String formatTime(long diff){ 
    long t; 
    t = diff; 
    if(t < 10){ 
     return String.valueOf("0"+t); 
    } else { 
     return String.valueOf(t); 
    } 
} 
+0

Sie werden nicht 70 Jahre alt. Sie erstellen eine Zeichenfolge basierend auf einem Datum, das als die Zeit seit dem 1. Januar 1970 um 12:00 Uhr interpretiert wird. Dann drucken Sie das Jahr, also 1970 oder "70". Sehen Sie, was passiert, wenn Sie 'String time = new SimpleDateFormat versuchen (" yy: mm: dd: HH: mm: ss "). Format (0);' - es wird das genaue Datum sein. Http://stackoverflow.com/questions/17940200/how-to-find-the-duration-of-difference-between-two-dates-in-java – childofsoong

+0

Eigentlich, jetzt, wo ich darüber nachdenke, ist es wahrscheinlich Ich werde das genaue Datum nicht sagen, sondern mich stattdessen auf Ihre Zeitzone einstellen. Gleiches Prinzip. – childofsoong

+0

[Wie formatiert man ein verstrichenes Zeitintervall im Format hh: mm: ss.SSS in Java?] (Http://stackoverflow.com/questions/6710094/how-to-format-an-elapsed-time-interval-in -hhmmss-sss-format-in-java) – shmosel

Antwort

1

Sie formatieren den Zeitunterschied als yy: mm: dd: HH: mm: ss. Wenn Sie nur diffTime ausgeben, erhalten Sie die Millisekunden, dividieren Sie durch 1000, wenn Sie Sekunden brauchen.

EDIT: Ich denke, ich sehe, was Sie versuchen zu tun, aber Sie haben es mit einem Zeitintervall, das nicht als Datum formatiert werden kann. Sie müssen Ihre eigene Formatierung für die Anzeige der Uhrzeit in Sekunden, Minuten, Stunden usw. rollen oder eine externe Bibliothek verwenden.

0

getTime gibt die Anzahl der Millisekunden vom 1.1.1970 zurück ... und dasselbe gilt für SimpleDateFormat, das die Zahl bis zum Datum konvertiert (und formatiert). Das bedeutet, wenn SimTime = 0 ist, wird SimpleDateFormat versuchen, Date 1.1.1970 0:00:00 zu formatieren, und mit Ihrer Formatierungszeichenfolge wird es 70: 01: 01: 00: 00: 00 sein. Versuchen Sie stattdessen http://joda-time.sourceforge.net/api-release/org/joda/time/Interval.html zu verwenden.

Und übrigens, Ihre Formatierungs-Zeichenfolge ist sowieso falsch ... Sie verwenden mm, wo ich wollte Sie Monat ... aber mm sind Minuten.

Verwandte Themen