如何计算SQLite表中存储日期至今的天数(旧Java版本适配)
解决方案
方式一:在Java代码中计算(兼容性最优)
你存储的mydate是System.currentTimeMillis()返回的毫秒级时间戳,直接在Java层计算天数差完全不依赖SQLite版本,适合旧环境:
- 从数据库读取
mydate的long类型值 - 获取当前时间戳并计算差值:
long storedTime = // 从数据库读取的mydate值 long currentTime = System.currentTimeMillis(); // 计算整数天数(一天=86400000毫秒) long daysDiff = (currentTime - storedTime) / 86400000L; // 如需处理时区或精确到小数天数,用Date类兼容旧版本: Date storedDate = new Date(storedTime); Date nowDate = new Date(); long diffMs = nowDate.getTime() - storedDate.getTime(); double preciseDays = diffMs / (1000.0 * 60 * 60 * 24);
方式二:兼容旧SQLite版本的SQL语句计算
方案A:基于毫秒数直接计算
利用strftime获取当前毫秒级时间戳,统一单位后计算:
SELECT (strftime('%s','now') * 1000 - mydate) / 86400000 AS days FROM mytable
strftime('%s','now')返回当前秒级时间戳,乘以1000转为毫秒,和mydate单位一致- 差值除以86400000得到整数天数
方案B:转日期后精确计算
若需考虑时区或午夜边界,先将毫秒转成SQLite日期格式再计算:
SELECT julianday('now') - julianday(datetime(mydate / 1000, 'unixepoch')) AS days FROM mytable
mydate / 1000将毫秒转为秒级时间戳datetime(..., 'unixepoch')把秒级时间戳转为SQLite可识别的日期julianday计算两个日期的天数差(结果为带小数的精确值)
如果你的SQLite版本确实不支持julianday,用等价的strftime('%J')替代:
SELECT (strftime('%J','now') - strftime('%J', datetime(mydate / 1000, 'unixepoch'))) AS days FROM mytable
内容的提问来源于stack exchange,提问作者AstFreelancer
相关产品推荐
相关产品推荐

