gpt4 book ai didi

java - 单击两次按钮的持续时间返回错误值

转载 作者:行者123 更新时间:2023-12-01 10:44:40 25 4
gpt4 key购买 nike

我正在尝试通过在用户休息之前单击并在完成休息时单击另一个按钮来计算用户所花费的休息时间。我偶然发现了几个问题,并了解到最好的方法是使用 nanoTime() 方法。

System.nanoTime();

但问题是当我计算持续时间时它返回奇怪的值。

Screenshot

这是我的代码,

        btnStartBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakStartTime = System.nanoTime();
breakTv.setText("Do you want to finish the break?");
btnStartBreak.setVisibility(View.GONE);
btnFinishBreak.setVisibility(View.VISIBLE);
}
});

btnFinishBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakFinishTime = System.nanoTime();
long breakTime = breakFinishTime - breakStartTime;
Toast.makeText(getApplicationContext(), getDate(TimeUnit.NANOSECONDS.toMillis(breakTime), "mm:ss:SSS"), Toast.LENGTH_LONG).show();
}
});

public static String getDate(long milliSeconds, String dateFormat){
// Create a DateFormatter object for displaying date in specified format.
SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);

// Create a calendar object that will convert the date and time value in milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);
return formatter.format(calendar.getTime());
}

我用过这个link将毫秒转换为小时和分钟。

最佳答案

我对您的代码做了一些实验,使用了 System.nanoTime() 和 System.currentTimeMillis() ,并且在这两种情况下我都成功了。

使用 System.currentTimeMillis()

long breakStartTime, breakTime;
btnStartBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakStartTime = System.currentTimeMillis();
breakTv.setText("Do you want to finish the break?");
btnStartBreak.setVisibility(View.GONE);
btnFinishBreak.setVisibility(View.VISIBLE);
}
});

btnFinishBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakTime = System.currentTimeMillis() - breakStartTime ;
Toast.makeText(getApplicationContext(), getDate(breakTime, "mm:ss.SSS"), Toast.LENGTH_LONG).show();
}
});

使用 System.nanoTime()
nanoTime() 专门设计用于测量耗时,而 currentTimeMillis() 则依赖于系统时钟设置的时间(可以更改)。因此,最好使用 nanoTime() 来计算耗时。

long breakStartTime, breakTime , durationInMs;
btnStartBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakStartTime = System.nanoTime();
breakTv.setText("Do you want to finish the break?");
btnStartBreak.setVisibility(View.GONE);
btnFinishBreak.setVisibility(View.VISIBLE);
}
});

btnFinishBreak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
breakTime = System.nanoTime() - breakStartTime ;
//convert nanoseconds value to milliseconds
durationInMs = TimeUnit.MILLISECONDS.convert(breakTime , TimeUnit.NANOSECONDS);
Toast.makeText(getApplicationContext(), getDate(durationInMs, "mm:ss.SSS"), Toast.LENGTH_LONG).show();
}
});

关于java - 单击两次按钮的持续时间返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com