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

基于指定规则将总分钟数转换为天时分格式的Kotlin代码优化咨询

分钟转天/小时/分钟显示格式的Kotlin优化实现

需求规则

  • 舍入规则:剩余分钟数≥30时向上进1小时,<30时舍去。例:6050分钟对应4天4小时50分钟,显示为4d 5h;6090分钟对应4天5小时30分钟,显示为4d 6h;6089分钟对应4天5小时29分钟,显示为4d 5h
  • 特殊场景:0d 0h 0m统一显示为0m
  • 长时长规则:总小时数>100时,输出不包含分钟单位

现有代码可优化点

  1. 总小时数计算逻辑错误:原代码中time * 60.0是分钟转秒的逻辑,转小时应该是time / 60.0,会导致长时长判断完全失效
  2. 存在大量重复的分支判断,冗余度高
  3. 字符串拼接逻辑会产生多余空格,比如天数为0时输出内容开头会带空格
  4. 函数返回值声明为可空String?无必要,所有分支都有返回值可直接返回非空类型
  5. 存在多余的字符串转整型判断,可直接用原始数值做判断

优化后代码

fun minutesToDaysHoursMinutes(time: Double): String {
    // 处理0时长特殊场景
    if (time <= 0) return "0m"
    
    val totalMinutes = time.toLong()
    // 先处理分钟进位逻辑
    val adjustedTotalMinutes = if (totalMinutes % 60 >= 30) {
        totalMinutes + (60 - totalMinutes % 60)
    } else {
        totalMinutes - totalMinutes % 60
    }
    
    val totalHours = adjustedTotalMinutes / 60
    val days = totalHours / 24
    val hours = totalHours % 24
    val minutes = totalMinutes % 60

    val parts = mutableListOf<String>()
    // 长时长判断:总小时数>100不显示分钟
    if (totalHours > 100) {
        if (days > 0) parts.add("${days}d")
        if (hours > 0) parts.add("${hours}h")
    } else {
        if (days > 0) parts.add("${days}d")
        if (hours > 0) parts.add("${hours}h")
        parts.add("${minutes}m")
    }
    
    return parts.joinToString(" ")
}

优化说明

  • 统一前置处理分钟进位逻辑,后续无需再重复判断分钟值
  • 用列表收集时间单位部分,joinToString自动处理空格拼接,不会产生多余空格
  • 分支逻辑大幅简化,可读性和可维护性更高
  • 修复了原代码总小时数计算的bug,长时长判断逻辑准确
  • 覆盖所有边界场景,包括0时长的特殊处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:04