我在启动计时器以及如何将数据放入日期方面遇到问题。
这是我的代码:
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
将数据放入日期并启动计时器是否正确?
答案 0 :(得分:3)
我认为你不应该使用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
类,这是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);
}