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

如何在Kotlin中判断两个日期间隔是否超过24小时?

判断日期差是否超过24小时并更新Room数据库

一、用SharedPreferences存储上次更新时间

直接存储时间戳(毫秒数)是最可靠的方式,避免日期字符串解析的时区、格式问题:

// 存储上次更新的时间戳
SharedPreferences sp = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE);
sp.edit().putLong("last_update_timestamp", System.currentTimeMillis()).apply();

二、对比时间差是否超过24小时

读取存储的时间戳,和当前时间计算差值,判断是否达到24小时:

SharedPreferences sp = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE);
// 默认值0表示从未执行过更新
long lastUpdateTime = sp.getLong("last_update_timestamp", 0);
long currentTime = System.currentTimeMillis();

// 24小时对应的毫秒数:24*60*60*1000 = 86400000
boolean needUpdate = (currentTime - lastUpdateTime) >= 86400000 || lastUpdateTime == 0;

三、满足条件时更新Room数据库

如果判定需要更新,执行Room操作并同步更新SharedPreferences的时间戳:

if (needUpdate) {
    // Room操作需在子线程执行(同步Dao),或用Coroutine/RxJava处理异步
    new Thread(() -> {
        // 替换为你的Room更新逻辑
        yourRoomDao.updateTargetData(yourUpdatedEntity);
        
        // 更新SharedPreferences的时间戳
        SharedPreferences sp = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE);
        sp.edit().putLong("last_update_timestamp", System.currentTimeMillis()).apply();
    }).start();
}

注意事项

  • 时间戳对比不受时区、日期格式影响,是最稳定的判断方式
  • 若使用Room的异步Dao(带suspend注解),可结合Coroutine替代子线程
  • 若不需要首次启动就更新,可去掉lastUpdateTime == 0的判断条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:10:17