Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式化秒表以显示00:00_Java_Android_Stopwatch - Fatal编程技术网

Java 格式化秒表以显示00:00

Java 格式化秒表以显示00:00,java,android,stopwatch,Java,Android,Stopwatch,我正在尝试在我的一个应用程序中使用秒表,我已经将它设置为开始计时秒和停止计时秒。我的问题是,它会在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

我正在尝试在我的一个应用程序中使用秒表,我已经将它设置为开始计时秒和停止计时秒。我的问题是,它会在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);
}

顺便说一下,他的问题是时间跨度,如果我理解正确,这与秒表不同(如果我错了,请纠正我)。谢谢你的时间和努力

您只需要创建一个函数来为您创建字符串。把这个藏在可以拿到的地方

    public String NumToStr(long i){
        if (i < 10 ) {
            return ("0" + Long.toString(i));
        }
        return Long.toString(i);
    }
你会得到“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;  

如果以秒为单位开始计时:

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);
if(秒<60)
display=String.format(“%02d”,秒);
其他的
display=String.format(“%d:%02d”,秒/60,秒%60);

你提到的那个问题是C!看看这个问题,你为什么否决我的问题?我只是想知道,这样我可以改进未来的问题。当然,你应该先检查一下,当你点击“提问”并输入标题时,标题下面有一个动态列表,其中有类似的问题。另外,你提到的是完全不同的东西。这是SO的一个问题,用户在发布之前实际上没有先检查任何类似的问题;最终的结果是会出现很多潜在的重复项,这会让那些参与“我们是否应该通过标记为重复项来删除问题”等的人感到头疼,并最终投票否决。感谢反馈,我在标题下的动态列表中没有看到任何类似的问题,我在谷歌上也没有看到任何内容。另外,您提供的问题有一个不同的问题:他已经知道如何设置min和sec的格式。这里只想从00:00:00开始,而不是从0:0:0开始。再次感谢你的解释。我应该把所有这些放在哪里?别忘了你需要在代码中声明秒、分钟和小时的长度,以其他3个最终整数为单位。我相信你的答案也会奏效,但我接受了MARB的答案,因为它很简单。但是+1对你来说,因为你的答案解释得很好。我只是想要一些你能理解它是如何工作的东西。但一切都很好。
if (seconds < 60)
    display = String.format("%02d", seconds);
else
    display = String.format("%d:%02d", seconds / 60, seconds % 60);