如何将时间值格式化为“00:00”和“00:00:00”Kotlin?

问题描述 投票:0回答:2

我有一个名为

Long
delta
值,其中包含以毫秒为单位的时间值。

我正在尝试将其格式化为可读的

String
,例如
00:00:00
,或者如果小时值为零
00:00

private fun remainingTime(delta: Long): String {

    val hours = TimeUnit.MILLISECONDS.toHours(delta)

    return if (hours == 0L) {
        String.format(
            "%02d:%02d",
            TimeUnit.MILLISECONDS.toMinutes(delta) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(delta)),
            TimeUnit.MILLISECONDS.toSeconds(delta) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(delta))
        )
    } else {
        String.format(
            "%02d:%02d:%02d",
            hours,
            TimeUnit.MILLISECONDS.toMinutes(delta) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(delta)),
            TimeUnit.MILLISECONDS.toSeconds(delta) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(delta))
        )
    }
}

上面的代码可以工作,但看起来效率很低。我打赌有一种聪明的 Kotlin 方法可以解决这个问题?

kotlin
2个回答
1
投票

更简洁的代码版本是在

to*Part()
上使用
Duration
函数,例如

    val duration = java.time.Duration.ofMillis(delta)
    val hours = duration.toHours()
    val minutes = duration.toMinutesPart()
    val seconds = duration.toSecondsPart()

    return if (hours == 0L) {
        String.format("%02d:%02d", minutes, seconds)
    } else {
        String.format("%02d:%02d:%02d", hours, minutes, seconds)
    }

0
投票

这里可以使用Kotlin的字符串插值:

fun main() {
        
        println(remainingTime(1711642863619))
    }
    private fun Long.formatTheDuration(): String {
        val hours = TimeUnit.MILLISECONDS.toHours(this)
        val minutes = TimeUnit.MILLISECONDS.toMinutes(this) % 60
        val seconds = TimeUnit.MILLISECONDS.toSeconds(this) % 60
    
        return buildString {
            if (hours > 0) {
                append("%02d:".format(hours))
            }
            append("%02d:%02d".format(minutes, seconds))
        }
    }
    
    private fun remainingTime(delta: Long): String {
        return delta.formatDuration()
    }
© www.soinside.com 2019 - 2024. All rights reserved.