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
相关产品推荐
相关产品推荐

