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

Kotlin中如何将毫秒值转换为HH:MM:SS秒表格式?

Kotlin 毫秒时长转秒表HH:MM:SS格式最优实现

目前最简便、出错率最低的现代写法是直接使用JDK内置的时间API完成换算,不需要手动编写整除、取余逻辑,避免人工计算带来的边界错误。

标准实现(普通秒表场景,时长不超过24小时)

直接使用java.time包下的Duration和时间格式化工具即可,无任何额外依赖,适配JDK 8及以上版本:

import java.time.Duration
import java.time.LocalTime
import java.time.format.DateTimeFormatter

fun main() {
    val past = System.currentTimeMillis()
    val future = System.currentTimeMillis() + 1000L

    // 每秒计算一次差值,对应秒表运行逻辑
    val duration = Duration.ofMillis(future - past)

    // 定义秒表固定格式,自动补前导零
    val formatter = DateTimeFormatter.ofPattern("HH:mm:ss")
    val stopwatchText = LocalTime.ofNanoOfDay(duration.toNanos()).format(formatter)
    // 示例输出:00:00:01
}

适配长时长场景(累计时长可能超过24小时)

如果你的秒表需要支持超过24小时的累计计时,不要使用LocalTime(它的时间范围最大为23:59:59),可以直接调用Duration的内置分段方法拼接字符串,适配JDK 9及以上版本:

val stopwatchText = String.format(
    "%02d:%02d:%02d",
    duration.toHours(),
    duration.toMinutesPart(),
    duration.toSecondsPart()
)

这个写法里的toMinutesPart()、toSecondsPart()会自动扣除已经折算到小时、分钟的部分,不需要手动写% 60的取余逻辑,比如3661秒的时长会正确输出为01:01:01。

方案优势

  • 不需要自己维护时分秒的换算逻辑,避免了手动取余、整除时容易出现的边界计算错误
  • 格式化自动补前导零,不需要额外判断数值位数
  • 是目前Kotlin/JVM生态下官方推荐的时间处理写法,后续维护成本极低

如果是Kotlin跨平台项目,使用官方kotlinx-datetime库的实现逻辑和上述写法几乎一致,不需要调整换算思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:15:43