如何将毫秒转换为模式 mm:ss for kotlin

时间:2021-04-07 13:55:25

标签: java android kotlin time minute

我有以下代码,但我不明白我想要的结果是如何出错的, 起初我有一个总时间应该是 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)
   }

谢谢

2 个答案:

答案 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
}