2016-05-05 5 views
0

Ich erstellte eine Count-Up-Timer-Funktion in einem Java-Swing-Fenster zu verwenden. Das Problem ist, dass die Zeit nicht von Null an zu zählen beginnt. Wenn ich den Timer starte, kommt die Anfangszeit immer mit einer Stunde voraus.Count up Timer in Java nicht beginnend mit 0

Hier ist mein Code:

public static void timeRecording(){ 
     Date startTime = new Date(); 
      int delay = 1000; //milliseconds 
      ActionListener taskPerformer = new ActionListener() { 
       public void actionPerformed(ActionEvent evt) { 
         SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm:ss"); 
         Date actualTime = new Date(); 
         String dateToPrint = timeFormat.format(new Date(actualTime.getTime() - startTime.getTime())); 


         //String dateToPrint = timeFormat.format(actualTime); 
         System.out.println(actualTime); 
         //actualTime 
         // String timeToPrint.timeFormat = actualTime; 
         timerLabel.setText(dateToPrint); 

       } 
      }; 
    new Timer(delay, taskPerformer).start(); 

} 

Dies ist die Zeit zu Beginn gezeigt ist: Time shown at start

+3

Wahrscheinlich, weil Sie Ihre Zeitzone UTC + 1 verwendet wird. – assylias

+0

@assylias angeblich ist meine Zeitzone UTC + 0 (Lissabon Greenwich). Ich habe bereits versucht, das Format mit timeFormat.setTimeZone (TimeZone.getTimeZone ("GMT")) zu ändern, aber jetzt beginnt von 12:00:00 – Bruno

+0

Lissabon ist in UTC + 1 – assylias

Antwort

0

Ihre SimpleDateFormat von "hh:mm:ss" verwendet h, die in der JavaDoc wie beschrieben wird:

h Stunde in am/pm (1-12)

So wird Ihre Stunde immer starten unter 1.

Sie könnten versuchen,

K Hour am/pm (0-11)

heißt "KK:mm:ss"

+0

Es funktioniert! "HH" funktioniert auch. – Bruno

0

Was das zwischen den Daten, wenn die Differenz eine Sekunde geschieht, ist dies: new Date(actualTime.getTime() - startTime.getTime()) auf ein Datum erstellt 1. Januar 1970 um 00:01 Uhr UTC.

Aber wenn Sie es formatieren, verwendet das DateFormat Ihre Zeitzone (Lissabon = UTC + 1) und sieht das Datum als 1. Januar 1970 um 01:01 UTC + 1.

Wenn Sie die richtige Ausgabe erhalten möchten, müssen Sie die Zeitzone des Formatierer einzustellen:

SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss"); 
fmt.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(fmt.format(new Date(0))); //outputs 00:00:00 as expected 

Hinweis: Das Muster richtige Format ist HH (0-23), nicht hh (die 1 -12).