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

如何计算SQLite表中存储日期至今的天数(旧Java版本适配)

解决方案

方式一:在Java代码中计算(兼容性最优)

你存储的mydate是System.currentTimeMillis()返回的毫秒级时间戳,直接在Java层计算天数差完全不依赖SQLite版本,适合旧环境:

  1. 从数据库读取mydate的long类型值
  2. 获取当前时间戳并计算差值:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:05:16