You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何将毫秒级Long值格式化为00:00或00:00:00格式?

优化毫秒时间格式化的Kotlin实现

你的需求是将毫秒数格式化为两种时间字符串:小时为0时显示MM:SS,否则显示HH:MM:SS。原代码存在重复调用TimeUnit转换方法的冗余计算,这里提供几种更简洁高效的实现方式:

基础优化版

通过先计算总秒数,再用整数除法和取模拆分小时、分钟、秒,避免重复转换操作:

private fun remainingTime(delta: Long): String {
    val totalSeconds = delta / 1000
    val hours = totalSeconds / 3600
    val minutes = (totalSeconds % 3600) / 60
    val seconds = totalSeconds % 60

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

动态拼接简化版

利用buildString动态拼接,减少条件分支的重复格式化代码:

private fun remainingTime(delta: Long): String {
    val totalSeconds = delta / 1000
    val hours = totalSeconds / 3600
    val minutes = (totalSeconds % 3600) / 60
    val seconds = totalSeconds % 60

    return buildString {
        if (hours > 0) append("%02d:".format(hours))
        append("%02d:%02d".format(minutes, seconds))
    }
}

when表达式增强可读性版

用Kotlin的when替代if-else,逻辑表达更清晰:

private fun remainingTime(delta: Long): String {
    val totalSeconds = delta / 1000
    val hours = totalSeconds / 3600
    val minutes = (totalSeconds % 3600) / 60
    val seconds = totalSeconds % 60

    return when (hours) {
        0L -> "%02d:%02d".format(minutes, seconds)
        else -> "%02d:%02d:%02d".format(hours, minutes, seconds)
    }
}

这些实现的优势:

  • 仅做一次毫秒到秒的转换,后续用数学运算拆分时间单位,性能更优
  • 变量命名直观,逻辑清晰,可读性更强
  • 避免了原代码中重复调用TimeUnit方法的冗余计算

内容的提问来源于stack exchange,提问作者Ralf Wickum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:12:40