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

Android Studio中Kotlin代码无法相减两个TimeMark的问题求助

问题解决:TimeMark相减报错

问题根源

你的代码逻辑本身无问题,但Gradle配置的Kotlin版本(1.7.21)与你声称的1.9.0不匹配。在Kotlin 1.7.x版本中,TimeMark的minus操作被完全禁用——无论两个标记是否来自同一TimeSource,都会触发你看到的错误;而从Kotlin 1.8开始,官方放开了同一TimeSource生成的TimeMark相减限制,因为能确保时间源一致,操作逻辑明确。

解决方案

方案1:升级Kotlin版本到1.9.0

  1. 修改gradle.properties中的版本配置:
KOTLIN_VERSION = 1.9.0
  1. 点击Android Studio右上角的Sync Project with Gradle Files按钮同步项目。
  2. 若同步后仍有缓存问题,执行File → Invalidate Caches...,勾选Invalidate and Restart重启IDE。

方案2:适配Kotlin 1.7.x的替代写法

如果暂时无法升级版本,可通过TimeMark.elapsedNow()间接计算时长,避免直接相减:

@OptIn(ExperimentalTime::class)
val timeSource = TimeSource.Monotonic
val startTime = timeSource.markNow() 
processing()
// 直接计算从startTime到当前的时长
val duration: Duration = startTime.elapsedNow()

或者通过两个标记的已流逝时间相减:

@OptIn(ExperimentalTime::class)
val timeSource = TimeSource.Monotonic
val startTime = timeSource.markNow() 
processing()
val endTime = timeSource.markNow() 
val duration: Duration = endTime.elapsedNow() - startTime.elapsedNow()

配置验证

确保项目实际使用的Kotlin版本正确:

  • 打开File → Project Structure,在Project标签下查看Kotlin Version是否为1.9.0;
  • 检查模块级build.gradle(若存在),避免局部配置覆盖全局版本设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:42:48