我有以下Kotlin代码用于简单的倒数计时器:
val thousand: Long = 1000
val timer = object: CountDownTimer(1800000, 1000) {
override fun onTick(millisUntilFinished: Long) {
var timeResult = millisUntilFinished/thousand
textTimer.text = "$timeResult"
}
override fun onFinish() {
textTimer.text = "Time is out"
}
}
timer.start()
textTimer.text = "$timer"
如何在Kotlin中将1800 seconds
格式化为30 min : 00 sec
?
答案 0 :(得分:3)
您可以通过整数除法和取模(%
)来获得数字
并使用padStart()
格式化为2位数字:
val secs = 1800
val formatted = "${(secs / 60).toString().padStart(2, '0')} min : ${(secs % 60).toString().padStart(2, '0')} sec"
println(formatted)
将打印
30 min : 00 sec
答案 1 :(得分:2)
由于您以JVM为目标,因此应使用Java 8 Date / Time Api。您可以创建一个非常简洁的函数,如下所示:
fun countdown(s: Long) = with(LocalTime.ofSecondOfDay(s)) {
String.format("%02d min :%02d sec", minute, second)
}
countdown(1800) // 30 min : 00 sec
推荐
:不要在呼叫站点(在onTick
中)进行计算。这使得不必要的代码难以理解。为此创建一个单独的函数。
这是一个简单的计算,但是请使用标准库提供的内容。首先,对代码进行了优化,其次,您可以轻松扩展该函数以计算工时等。未经测试的手工起草的代码容易出错。
答案 2 :(得分:1)
这是我目前的代码:
val timer = object: CountDownTimer(1800000, 1000) {
override fun onTick(millisUntilFinished: Long) {
val timeResult =
"${(millisUntilFinished / 1000 / 60).toString().padStart(2, '0')}:" +
"${(millisUntilFinished / 1000 % 60).toString().padStart(2, '0')} "
textTimer.text = "$timeResult"
}
override fun onFinish() {
textTimer.text = "Time is out"
}
}
timer.start()
textTimer.text = "$timer"
答案 3 :(得分:0)
以下代码可以从毫秒(这是您最初的时间)转换为分钟和秒:
val milliseconds: Long = 1800000
val minutes = milliseconds / 1000 / 60
val seconds = milliseconds / 1000 % 60
println("$minutes min : $seconds sec")
输出:
30 min : 0 sec
编辑1 :
如果从几秒钟到几分钟又几秒钟严格需要它,只需将多余的除以1000。
该代码将是:
val seconds: Long = 1800
val minutes = milliseconds / 60
val seconds = milliseconds % 60
println("$minutes min : $seconds sec")
原始问题中的代码包含毫秒,这就是为什么我从毫秒中提到它。
编辑2 :
缺少两位数字的格式。
@forpas使用.toString().padStart(2, '0')
的答案将给出正确格式的输出。因此,正确的代码应为:
val milliseconds: Long = 1800000
val minutes = milliseconds / 1000 / 60
val seconds = milliseconds / 1000 % 60
println("{$minutes.toString().padStart(2, '0')} min : {$seconds.toString().padStart(2, '0')} sec")
输出:
30 min : 00 sec