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

Kotlin中如何比较API返回日期与当前日期以显示不同ImageView

问题根因与修复方案

一、初始日期判断逻辑错误点

  • 错误1:调用mTextDate.toString()获取的是TextView控件的对象描述字符串,不是控件展示的文本内容,正确写法应该是mTextDate.text.toString()
  • 错误2:你用来比较的两个字符串格式完全不一致:mTextDate用FormatStyle.FULL格式化,输出类似2024年5月20日 星期一,而_date是dd-MMM-yyyy格式输出类似20-May-2024,字符串对比结果必然不符合预期
  • 错误3:完全没必要转成字符串对比,你的代码里已经生成了两个LocalDate对象:接口返回的date、当前本地日期gregorianDate,直接用LocalDate自带的时间比较方法即可,性能和准确率都更高

日期判断修复代码

直接替换你原来的if判断块即可:

when {
    date.isBefore(gregorianDate) -> mTick.setImageResource(R.drawable.tick)
    date.isAfter(gregorianDate) -> mTick.setImageResource(R.drawable.ic_logopng)
    else -> mTick.setImageResource(R.drawable.blue_logo)
}

二、更新后时间判断逻辑错误点

  • 错误1:判断条件重复,第三个分支你写的还是event.startTime < time,等于的情况永远不会触发
  • 错误2:业务逻辑写反:event.startTime > currentTime是还没到开始时间,对应未开始状态;event.startTime < currentTime是已经过了开始时间,如果没到结束时间是进行中,过了结束时间是已完成;你现在的状态映射完全搞反了,所以只有大于的分支符合你的错误逻辑才会触发
  • 额外注意:如果接口返回的startTime时区和本地时区不一致,需要先做时区对齐再比较

时间判断修复代码

val currentTime = LocalTime.now()
// 把接口返回的HH:mm格式字符串转成LocalTime
val eventStartTime = LocalTime.parse(event.startTime, DateTimeFormatter.ofPattern("HH:mm"))
when {
    eventStartTime.isAfter(currentTime) -> {
        // 未开始
        mTextTimeEstimated.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_upcoming_very_small, 0)
    }
    eventStartTime.isBefore(currentTime) -> {
        // 已开始,判断是否结束
        val eventEndTime = LocalTime.parse(event.endTime, DateTimeFormatter.ofPattern("HH:mm"))
        if (eventEndTime.isAfter(currentTime)) {
            // 进行中
            mTextTimeEstimated.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_ongoing_very_small, 0)
        } else {
            // 已结束
            mTextTimeEstimated.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_completed_very_small, 0)
        }
    }
    else -> {
        // 刚好到开始时间,算进行中
        mTextTimeEstimated.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_ongoing_very_small, 0)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:36:03