【问题标题】:Format Stopwatch to display 00:00格式化秒表以显示 00:00
【发布时间】:2012-08-08 18:18:46
【问题描述】:

我正在尝试在我的一个应用程序中使用秒表,并且我已经将它设置为在开始时开始计数秒并在停止时停止计数的位置。我的问题是它会在 60 秒后继续。例如,如果我等了两分钟,我会得到 120 秒。

所以我的问题是我怎样才能做到,一旦秒数达到 60,分钟数会增加 1 秒数会重新开始?

所以我会得到 2:00 而不是 :120。这是我的代码:

final int MSG_START_TIMER = 0;
final int MSG_STOP_TIMER = 1;
final int MSG_UPDATE_TIMER = 2;

Stopwatch timer = new Stopwatch();
final int REFRESH_RATE = 100;

Handler mHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
        case MSG_START_TIMER:
            timer.start(); 
            mHandler.sendEmptyMessage(MSG_UPDATE_TIMER);
            break;

        case MSG_UPDATE_TIMER:              
            tvTextView.setText(":"+ timer.getElapsedTimeSecs());                
            mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
            break;                                  
        case MSG_STOP_TIMER:
            mHandler.removeMessages(MSG_UPDATE_TIMER); 
            timer.stop();
            tvTextView.setText("");
            break;

        default:
            break;
        }
    }
};

还有:

 public void start(View v) {
    mHandler.sendEmptyMessage(MSG_START_TIMER);
}

public void stop(View v) {
    mHandler.sendEmptyMessage(MSG_STOP_TIMER);
}

顺便说一句,我查看了this question,但他的问题在于 TimeSpan,如果我理解正确,这与秒表不同(如果我错了,请纠正我)。感谢您的时间和精力。

【问题讨论】:

  • 你提到的那个问题是C#!
  • 你为什么拒绝我的问题?只是想知道,这样我就可以改进未来的问题。
  • 当然,您应该先检查一下,当您单击提出问题并输入标题时,标题下方有一个动态列表,其中提出了类似的问题。另外,你提到的东西完全不同。这是 SO 的一个问题,用户在发布之前实际上并没有先检查任何类似的听起来问题;最终结果是会出现很多潜在的重复,并让参与其中的人感到头疼,例如“我们是否应该通过标记为重复来删除问题”等并因此投票否决
  • 感谢您的反馈,我在标题下方的动态列表中没有看到任何类似的问题,我在 Google 上也没有看到任何内容。您提供的问题还有一个不同的问题:他已经知道如何格式化 min 和 sec。这里只想从 00:00:00 而不是 0:0:0 开始。再次感谢您解释自己。

标签: java android stopwatch


【解决方案1】:

如果你以秒为单位开始时间:

display = String.format("%d:%02d", seconds / 60, seconds % 60);

如果您不希望分钟数为 0:

if (seconds < 60)
    display = String.format("%02d", seconds);
else
    display = String.format("%d:%02d", seconds / 60, seconds % 60);

【讨论】:

    【解决方案2】:

    您只需要创建一个为您创建字符串的函数。将其存放在可触及的地方。

        public String NumToStr(long i){
            if (i < 10 ) {
                return ("0" + Long.toString(i));
            }
            return Long.toString(i);
        }
    

    这将采用任何小于 10 的数字,并为您提供一个数字前面带有“0”的字符串。

    即发送一个 7 并获得“07”,然后发送一个 55 并获得“55”,因为它不少于 10。最后发送它的秒数 5 并获得“05”。现在将字符串添加在一起,

        Hour + ":" + Minute + ":" + Seconds;
    

    你会得到“07:55:05”

    接下来就放一个

        if (seconds > 60) {
            seconds = 0
            minutes++; 
        }
        if (minutes > 60) {
            minutes = 0
            hours++;
        }
        if (hours > 12) {
            hours = 0
        }
    

    恕我直言,这是基本的东西。

    作为回应,你应该把所有这些放在哪里?随你喜欢。但是你需要重做一些代码。

         case MSG_UPDATE_TIMER:
            long TimePassed;
            TimePassed = Seconds;
            if (Minutes > 0) {
                TimePassed = TimePassed  + (60 * Minutes);
            }
            if (Hours > 0) {
                TimePassed = TimePassed + (60 * 60 * Hours);
            }
    
            Seconds =  (timer.getElapsedTimeSecs()- TimePassed );
    
            if (Seconds > 60) {
                Seconds = 0
                Minutes++; 
            }
            if (Minutes > 60) {
                Minutes = 0
                hours++;
            }
            String timeSecs = NumToStr(Seconds);
            String timeMins = NumToStr(Minutes);
            String timeHours = NumToStr(Hours);
    
            String Time = timeHours + ":" + timeMins + ":" + timeSecs; 
    
            tvTextView.setText(Time);   
    
            mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
            break;  
    

    【讨论】:

    • 我应该把所有这些放在哪里?
    • 别忘了你需要在你的代码中将秒、分和小时声明为 Longs,由你的其他 3 个最终整数组成。
    • 我相信您的回答也可以解决问题,但由于简单,我接受了 MARB 的回答。但是为您 +1,因为您对答案的解释很好。
    • 我只是想要一些你能理解它是如何工作的东西。但一切都很好。
    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2021-07-05
    相关资源
    最近更新 更多