如何在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
相关产品推荐
相关产品推荐

