Возьмите пользовательские часы, минуты, секунды и начните обратный отсчет в формате чч: мм: сс
Я столкнулся с проблемой при запуске таймера и как поместить данные в дату. Это мой код
Calendar cl = Calendar.getInstance();
cl.set(Calendar.HOUR, 0);
cl.set(Calendar.MINUTE, 0);
cl.set(Calendar.SECOND, 0);
cl.add(Calendar.HOUR, hr);
cl.add(Calendar.MINUTE, min);
cl.add(Calendar.SECOND, sec);
Date date = cl.getTime();
Timer t =new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
jLabel2.setText(timeFormat.format(date));
}
});
t.start();
Это правильно использовать Calendar
поместить данные в дату и запустить таймер?
1 ответ
Я не думаю, что вы должны использовать Calendar
за это. Calendar
предназначен для представления точки в календарном времени, а не продолжительности в часах, минутах и секундах. Также, Calendar
это старый материал и заменен новыми и более дружественными к программисту классами в Java 8 (см. java.time
пакет).
Из комментариев я понимаю, что вам нужен таймер обратного отсчета. Я предлагаю:
Timer t = new Timer(1000, new ActionListener() {
Duration time = Duration.ofHours(hr).plusMinutes(min).plusSeconds(sec);
@Override
public void actionPerformed(ActionEvent ae) {
time = time.minusSeconds(1);
jLabel2.setText(formatDuration(time));
}
});
t.start();
Я использую Duration
class, один из классов, представленных в Java 8. Он рассчитан на продолжительность в часах, минутах и секундах, так что это то, что нам нужно для работы. Тем не менее, он не подходит для форматирования. Вы можете использовать его toString
метод, он даст вам строку, как PT9M52S
в течение 9 минут 52 секунды, вероятно, не то, что большинство пользователей находят наиболее интуитивным. Вместо этого я использую этот вспомогательный метод для форматирования:
static String formatDuration(Duration dur) {
long hr = dur.toHours();
Duration remainder = dur.minusHours(hr);
long min = remainder.toMinutes();
long sec = remainder.minusMinutes(min).getSeconds();
return String.format("%02d:%02d:%02d", hr, min, sec);
}