有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从用户处获取输入小时分秒,并以hh:mm:ss格式开始倒计时

我面临的问题是启动计时器以及如何将数据放入日期

这是我的代码:

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) 个答案

  1. # 1 楼答案

    我认为你不应该用Calendar来做这个。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类,它是Java8中引入的类之一。它设计的持续时间以小时、分钟和秒为单位,所以这是我们工作所需要的。不过,它不适合格式化。你可以使用它的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);
    }