我有以下代码,但我不明白我想要的结果是如何出错的, 起初我有一个总时间应该是 Long (Milisecond) 类型,然后我需要将它转换为格式 mm: ss 不是格式 (HH: mm: ss),那么谁能帮我转换它转 mm:ss 格式
private fun startCounting() {
var i = 60100
val totalSeconds =
TimeUnit.MINUTES.toSeconds(i.toLong())
Handler().postDelayed({
val tickSeconds = 0
for (second in tickSeconds until totalSeconds) {
val time =
String.format(
"%02d:%02d", TimeUnit.MILLISECONDS.toMinutes(second),
TimeUnit.MILLISECONDS.toSeconds(second) % TimeUnit.MINUTES.toMinutes(1)
)
}
}, 1000)
}
谢谢
答案 0 :(得分:0)
分钟数是毫秒数除以 60000。秒数是毫秒数除以 1000。但是要从秒数中去除分钟,您需要将其除以 60 的余数。< /p>
val minutes = i / 1000 / 60
val seconds = i / 1000 % 60
val formatted = String.format("%02d:%02d", minutes, seconds)
看起来您可能正在尝试每秒显示一次更新值的倒计时。但是在 for 循环中同步循环数字只会立即显示最终值。相反,您可以使用具有延迟的协程来做到这一点:
private fun startCounting() = lifecycleScope.launch {
val startTime = System.currentTimeMillis()
var remainingTime = 60100L
while (remainingTime >= 0) {
val minutes = remainingTime / 1000 / 60
val seconds = remainingTime / 1000 % 60
myTextView.text = String.format("%02d:%02d", minutes, seconds)
delay(1000L)
remainingTime = (60100L - System.currentTimeMillis() + startTime)
}
}
答案 1 :(得分:0)
使用 kotlin.time
包中的实验性 Duration
类型,您可以先将毫秒数转换为 Duration
,然后使用其 toComponents
方法将其拆分为分钟和秒:
import kotlin.time.*
fun main() {
val millis = 260100
val duration = millis.toDuration(DurationUnit.MILLISECONDS)
val timeString =
duration.toComponents { minutes, seconds, _ ->
String.format("%02d:%02d", minutes, seconds)
}
println(timeString) // prints 04:20
}