SimpleDataFormat不会格式化长类型变量并正确显示它

时间:2019-04-11 18:54:12

标签: java simpledateformat

我正在制作一个秒表,并到达最后一个阶段,必须在JLabel中显示时间。但是,显示似乎并不完全准确。

预期输出:00:00:000(计时器应该从该值开始计数) 实际输出:30:00:000(这是实际起始值。)

不知何故,我不知道数字“ 3”来自哪里。

  private void startTimer() {
  Thread thread = new Thread(new Runnable() {

      public void run() {
          timer.start();
          while (true) {
              if (!paused) {

                  final String timeString = new SimpleDateFormat("mm:ss:SSS").format(timer.getElapsedTime());
                  timeLabel.setText(timeString);

              } 
              else
              {
                  timer.pause();
              }
          }
      }
  });
  thread.start();
}

 #THIS IS THE STOPWATCH CLASS

  public class StopWatch {

private long startTime = 0;
private long stopTime = 0;
private long pausedTime = 0;
private boolean running = false;

public void start() {
    this.startTime = System.currentTimeMillis();
    pausedTime = 0;
    this.running = true;
}

public void stop() {
    this.stopTime = System.currentTimeMillis();
    this.running = false;
}

public void pause() {
    if(running) {
        pausedTime = System.currentTimeMillis();
        stop();
    }
}

public void resume() {
    if(!running){
        long duration = System.currentTimeMillis() - pausedTime;
        startTime += duration;

        this.running = true;

    }
}

//elaspsed time in milliseconds
public long getElapsedTime() {
    long elapsed;
    if (running) {
        elapsed = (System.currentTimeMillis() - startTime);
    } else {
        elapsed = (stopTime - startTime);
    }
    return elapsed;
}

}

找到了解决方案

 timeLabel.setText
(
            String.format("%02d:%02d:%02d", 

  TimeUnit.MILLISECONDS.toHours(timer.getElapsedTime()),

  TimeUnit.MILLISECONDS.toMinutes(timer.getElapsedTime()) - 
                    TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timer.getElapsedTime())),
                            TimeUnit.MILLISECONDS.toSeconds(timer.getElapsedTime()) - 
                          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timer.getElapsedTime()))));

在阅读了类似的文章之后,我已经成功地将时间格式化为所需的格式(hh:mm:ss),并且计时器运行得很好。 但是,我将研究更多的格式化方法,并尝试将代码修改为更简单的形式。

0 个答案:

没有答案