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

如何在Android Compose中对两个Long?类型的selectedDateMillis做减法

在Compose中处理Long?类型日期时间戳的减法运算

首先明确:Long?是可空类型,不能直接强制转成Long(除非你能百分百确定它不为null,否则会触发空指针),必须先处理空值情况,再执行减法。

核心解决方案:先校验空值,再运算

这里提供两种常用的安全处理方式:

方式1:用if判断非空后运算

// 假设你的两个可空时间戳是这两个变量
val startMillis = state.selectedStartDateMillis
val endMillis = state.selectedEndDateMillis

// 先判断两个值都不为null
if (startMillis != null && endMillis != null) {
    val timeDifference = endMillis - startMillis
    // 拿到差值后可以做后续处理,比如转成天数、小时数
    val days = java.util.concurrent.TimeUnit.MILLISECONDS.toDays(timeDifference)
} else {
    // 处理空值场景:比如提示用户选择完整的日期范围
}

方式2:用Kotlin的let链式调用简化代码

state.selectedStartDateMillis?.let { start ->
    state.selectedEndDateMillis?.let { end ->
        val timeDifference = end - start
        // 这里使用差值做业务逻辑,比如更新UI显示
        val hours = java.time.Duration.ofMillis(timeDifference).toHours()
    }
}

关于你提到的moment相关内容

moment是JavaScript生态的日期处理库,在Android/Kotlin开发里完全不需要用它。Android自带了足够的工具类处理时间差值:

  • 用TimeUnit可以快速转换毫秒到天、小时、分钟等单位
  • 用java.time.Duration(API 26+,低版本可以用ThreeTenABP兼容库)能更灵活地处理时间间隔

为什么直接转Long会失败

Long?类型变量可能存储null值,如果你用!!强制转成Long,一旦变量为null就会抛出NullPointerException;如果用as Long强转,同样会因为null导致崩溃。所以必须先通过非空判断确保变量有值,再进行运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:32:36