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

Kotlin中计算时间字符串与当前时间间隔的正确简便方法

Kotlin计算指定时间与当前时间的间隔并格式化输出

可靠实现方案(基于Java Time API)

直接使用Java 8引入的java.time包(Kotlin可无缝调用),这套API线程安全、设计严谨,完全替代旧的Date/Calendar类,能避免旧API的诸多漏洞。

完整代码示例

import java.time.LocalDateTime
import java.time.LocalTime
import java.time.Duration

fun getTimeUntilTarget(targetTimeStr: String): String {
    // 解析目标时间字符串(支持"HH:mm:ss"格式,符合ISO标准)
    val targetTime = LocalTime.parse(targetTimeStr)
    val now = LocalDateTime.now()
    
    // 构造当天的目标时间点,若已过则顺延至次日
    var targetDateTime = LocalDateTime.of(now.toLocalDate(), targetTime)
    if (targetDateTime.isBefore(now)) {
        targetDateTime = targetDateTime.plusDays(1)
    }
    
    // 计算时间间隔
    val duration = Duration.between(now, targetDateTime)
    // Java 9+ 可用toHoursPart()/toMinutesPart(),Java 8用下方注释的替代写法
    val hours = duration.toHoursPart()
    val minutes = duration.toMinutesPart()
    // Java 8兼容写法:
    // val totalMinutes = duration.toMinutes()
    // val hours = totalMinutes / 60
    // val minutes = totalMinutes % 60
    
    // 格式化输出,处理单复数
    return buildString {
        when {
            hours > 0 && minutes > 0 -> append("$hours hour${if (hours != 1) "s" else ""} and $minutes minute${if (minutes != 1) "s" else ""}")
            hours > 0 -> append("$hours hour${if (hours != 1) "s" else ""}")
            minutes > 0 -> append("$minutes minute${if (minutes != 1) "s" else ""}")
            else -> append("0 minutes")
        }
        append(" to the target time")
    }
}

// 测试调用
fun main() {
    println(getTimeUntilTarget("18:00:00"))
}

关键说明

  • 时间解析:LocalTime.parse()默认支持"HH:mm:ss"的ISO标准格式,无需自定义格式化器,简洁可靠。
  • 跨天处理:自动判断目标时间是否已过当天,若已过则顺延至次日,避免出现负数间隔。
  • 间隔计算:Duration类专门用于计算两个时间点的间隔,API直观,避免手动计算的错误。
  • 自然语言输出:自动处理"hour/hours"、"minute/minutes"的单复数,输出更符合日常表达习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:57:28