【发布时间】:2020-04-16 18:04:24
【问题描述】:
我正在尝试制作一个精度为 100 秒的秒表。我有此代码每 10 毫秒运行一次,但我无法将其转换为 0(min):0(sec):00 格式。
timer.post(new Runnable() {
@Override
public void run() {
time += 1;
txtView.setText(convertTimeToText(time));
timer.postDelayed(this, 10);
}
});
private String convertTimeToText(int time) {
String convertedTime = time / 6000 + ":" + (time / 100) % 60
+ ":" + (time / 10) % 10 + time % 10;
return convertedTime;
}
我需要有关格式化时间的 convertTimeToText(int time){} 方面的帮助。
编辑: 感谢 Ole V.V.和 WJS 用于格式化答案以及如何解决我遇到的延迟,如果有人需要,这是我想出的代码,到目前为止它运行良好,也许使用 System.nanoTime() 可以获得更准确的结果,但对于我用的很好。
public void start(){
final long timeMillisWhenStarted = System.currentTimeMillis();
if(!isRunning){
isRunning = true;
timer.post(new Runnable() {
@Override
public void run() {
long millisNow = System.currentTimeMillis();
long time = millisNow - timeMillisWhenStarted;
yourtxtView.setText(convertTimeToText(time));
timer.postDelayed(this, 10);
}
});
}
}
private String convertTimeToText(long time){
long hundredths = time / 10;
long sec = hundredths / 100;
long min = sec / 60;
return String.format("%02d:%02d.%02d", min % 60, sec % 60, hundredths % 100);
}
【问题讨论】:
-
@Nicknackd 请不要在 cmets 中发布您的代码。只需编辑您的帖子以响应建议的编辑。
-
您需要什么样的帮助。它怎么没有像你预期的那样工作?
-
我希望这可以工作,但是当我执行程序时,我得到一个一致的累积延迟,我无法找出原因。
-
顺便说一句,世界上大多数用户都希望在秒和秒的小数部分之间使用小数分隔符(点或逗号),而不是冒号。
-
感谢您提供自己的解决方案。两个建议:(1)将其作为答案发布,而不是作为对您问题的编辑。更多的人会找到它,它会更有帮助。 (2) 只考虑
min而不是min % 60。因此,当时间超过 1 小时时,分钟将继续 60、61、……而不是回到 0。我认为它不会那么混乱。
标签: java time datetime-format runnable