【问题标题】:Timer to minutes : seconds : hundreds of seconds [duplicate]计时器到分钟:秒:数百秒[重复]
【发布时间】:2012-12-30 04:56:04
【问题描述】:

可能重复:
How to convert milliseconds to “hh:mm:ss” format?

我敢打赌,很多人都需要一个计时器,其中包括:minutes : seconds : hundreds of seconds。 显然,您从以下开始:

` public TimeGame(){

    timer = new Timer(10, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            counter++;
        }
    });
    timer.start();
}`

然后你需要调用一个方法来转换这个计数器:minutes : seconds : hundreds of seconds

`private String timeTransfer(){

     minutes = counter/6000;
     counter = counter - (minutes*6000);
     seconds = counter/100 ;
     counter = counter - (seconds*100);
     milliseconds = counter;
     return minutes + " : " + seconds + " : " + miliseconds;
 }`

但我的方法中有一个错误。一旦达到 100 毫秒,它就会跳回 0。 通常它必须输入0:1:0,但它会跳回到0:0:0。 所有变量都在类中声明为私有。

所以我的问题是有人知道更好的方法吗?

【问题讨论】:

  • 没有重复,大多数定时器转换器都是hh:mm:ss
  • @MrMeThumbsUp 仍然重复,因为概念相同。

标签: java timer


【解决方案1】:

建议:

  • 除了你的数学是关闭的,一个基本的计时器规则:永远不要相信计时器的时间间隔。而是存储初始系统时间,从当前系统时间中减去它,并根据实时而不是一些人为的计数器增量进行计算。
  • 另外,您正在使用 magic 数字,需要避免使用它们。而是使用 SECONDS_PER_MINUTE 和 MINUTES_PER_HOUR 等常量,这将帮助您避免粗心的数学错误。

【讨论】:

  • 另外TimeUnit擅长转换...时间单位...例如:long SECONDS_PER_MINUTE = TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES);
  • @assylias:我从来不知道它的存在——谢谢!
  • 他们说 Java 7 将在 5 年前拥有 Joda-Time 等价物。现在他们说 Java 8 将拥有它/拥有它。
  • @LeeMeador Java 8 还在路上。最终的一组特性应该在一月底具体化。
【解决方案2】:

这是这段代码的规范形式,多年来被许多人多次编写:

private String timeTransfer(){

     minutes = counter/6000;
     seconds = (counter % 6000) /100 ;
     milliseconds = counter % 100;
     return minutes + " : " + seconds + " : " + milliseconds;
 }

另一位发帖人评论说,以这种方式使用计时器是不准确的。如果你只是运行这个东西几分钟,错误不会加起来太多。如果您做的时间超过几分钟,您将需要使用系统时间来处理此问题。

首先在初始化计数器时存储当前时间:

long startTime = System.currentTimeMillis();

然后你从timeTransfer()返回之前的开始时间定期更新计数器

if (milliseconds < 10) {
    counter = (System.currentTimeMillis() - start) / 10;
}

【讨论】:

  • 感谢您发布正确的公式。 1+
【解决方案3】:

您的方法 timeTransfer() 修改了类成员变量 counter。将其复制到方法开头的局部变量并对其进行计算,例如:

    long counter = this.counter;

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2016-03-18
    相关资源
    最近更新 更多