-3

我在启动计时器以及如何将数据放入日期时遇到问题。

这是我的代码:

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将数据放入日期并启动计时器是否正确?

4

1 回答 1

3

我认为您不应该Calendar为此使用 a 。ACalendar用于表示日历时间中的一个点,而不是以小时、分钟和秒为单位的持续时间。此外,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方法,它会给你一个类似PT9M52S9 分 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);
}
于 2017-04-01T07:36:22.900 回答