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
- 修改
gradle.properties中的版本配置:
KOTLIN_VERSION = 1.9.0
- 点击Android Studio右上角的Sync Project with Gradle Files按钮同步项目。
- 若同步后仍有缓存问题,执行
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
相关产品推荐
相关产品推荐

