Этот конструктор Date устарел , как и все конструкторы Date, отличные от того, который принимает аргумент в миллисекундах. API устарели по какой-то причине, обычно потому, что они работают не так, как задумано. Чтобы получать уведомления при использовании устаревших API-интерфейсов, включите все предупреждения компилятора в своей среде IDE и обратите внимание на эти предупреждения.
Дата не подходит для хранения прошедшего времени, поскольку она представляет собой абсолютную точку во времени. , Класс, который предназначен для представления разницы во времени, равен java .time.Duration .
. Вы можете рассчитать Duration из двух значений времени. Самое простое значение времени, вероятно, Instant , поэтому вам понадобится приватное поле типа Instant
в классе, который создает Timer и добавляет слушателя к кнопке, чтобы отслеживать, когда кнопка была нажата. :
private Instant timeOfLastButtonPress;
Затем вы можете инициализировать его при каждом нажатии кнопки:
laserOnOff.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!laserSetting) {
timeOfLastButtonPress = Instant.now();
timer.start();
laserSetting = true;
laserOnOff.setText("Laser On");
} else {
timer.stop();
laserSetting = false;
laserOnOff.setText("Laser Off");
}
}
});
Наконец, ваш таймер может рассчитать продолжительность, используя Duration.between :
Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());
Если вы используете Java 9 или более позднюю версию, вы можете извлечь числа из Duration напрямую:
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());
laserOnTimeTF.setText(String.format("%02d:%02d:%02d",
elapsedTime.toHoursPart(),
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart()));
}
});
В Java 8 вам понадобится чтобы вычислить это самостоятельно:
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Duration elapsedTime =
Duration.between(timeOfLastButtonPress, Instant.now());
laserOnTimeTF.setText(String.format("%02d:%02d:%02d",
elapsedTime.toHours(),
elapsedTime.toMinutes() % 60,
elapsedTime.getSeconds() % 60));
}
});