Счетчик таймер в java не начиная с 0

Я создал функцию таймера count up для использования в окне Java swing. Проблема в том, что время не начинает отсчет с нуля. Когда я запускаю таймер, начальное время всегда приходит на час вперед.

Вот мой код:

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

}

Это время показано в начале:
Время, показанное в начале

2 ответа

  1. Что происходит, если разница между датами составляет одну секунду, это: new Date(actualTime.getTime() - startTime.getTime())создает дату на 1 января 1970 в 00: 01 UTC.

    Но когда вы форматируете его, DateFormat использует ваш часовой пояс (Lisbon = UTC+1) и видит дату как 1 января 1970 года в 01:01 UTC+1.

    Если вы хотите получить правильный вывод, вам нужно установить часовой пояс формататора:

    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
    

    Примечание: правильный шаблон формата-HH (0-23), а не hh (который составляет 1-12).

  2. Ваш SimpleDateFormatиз "hh:mm:ss"использует hкоторый, в JavaDoc описывается как:

    час в час ночи ( 1-12)

    Таким образом, ваш час всегда будет начинаться на 1.

    Вы можете попробовать использовать

    K час в am /pm (0-11)

    т. е. "KK:mm:ss"