如何将 1800 秒格式化为 MM:SS 格式
How to format 1800 seconds to MM:SS format
我有以下用于简单倒数计时器的 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
?
以下代码可以将毫秒(这是您最初拥有的)转换为分钟和秒:
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
您通过整数除法和取模得到数字 (%
)
并使用 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
这是我的代码目前的样子:
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"
由于您的目标是 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
中)进行计算。这使得不必要的代码难以理解。为此创建一个单独的函数。
这是一个简单的计算,但请使用标准库提供的内容。首先,优化了代码,其次,您可以轻松扩展功能以计算小时等。未经测试的手写代码容易出错。
我有以下用于简单倒数计时器的 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
?
以下代码可以将毫秒(这是您最初拥有的)转换为分钟和秒:
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
您通过整数除法和取模得到数字 (%
)
并使用 padStart()
:
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
这是我的代码目前的样子:
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"
由于您的目标是 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
中)进行计算。这使得不必要的代码难以理解。为此创建一个单独的函数。这是一个简单的计算,但请使用标准库提供的内容。首先,优化了代码,其次,您可以轻松扩展功能以计算小时等。未经测试的手写代码容易出错。