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

Android开发中如何判断两个Java Date是否为同一天以筛选销售报表

问题解决:Android判断两个日期是否为同一天

核心错误原因

  • Java中字符串内容比对不能用==,==对比的是两个字符串对象的内存地址,不是内容值,所以即使两个字符串格式内容完全一致,也会返回false,应该用equals()方法比对内容
  • 用SimpleDateFormat转字符串比对的方式效率较低,还可能存在时区不一致导致的比对错误问题

修复方案

方案1:快速修复现有代码

直接修改字符串比对逻辑即可生效:

private void dateListArray() {  
    dateList.clear(); // 每次筛选前清空旧数据,避免重复累加
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
    String currDate = simpleDateFormat.format(calendar.getTimeInMillis());

    for (ProductModel p : myDatabase.getAllReport()) {
        String dates = simpleDateFormat.format(new Date(p.getDate()));
        // 替换为equals比对字符串内容,加空判断避免空指针崩溃
        if (currDate != null && currDate.equals(dates)){           
            dateList.add(p);
        }
    }
    adapter.setFilter(dateList);
}

方案2:更高效的时间戳比对(推荐)

不用转字符串,直接计算选中日期的开始和结束时间戳,判断数据库存储的时间戳是否在这个区间内,性能更高、准确性更强:

private void dateListArray() {
    dateList.clear();
    // 选中日期的开始时间:00:00:00.000
    Calendar selectCalendar = Calendar.getInstance();
    selectCalendar.setTime(calendar.getTime());
    selectCalendar.set(Calendar.HOUR_OF_DAY, 0);
    selectCalendar.set(Calendar.MINUTE, 0);
    selectCalendar.set(Calendar.SECOND, 0);
    selectCalendar.set(Calendar.MILLISECOND, 0);
    long startTime = selectCalendar.getTimeInMillis();
    // 选中日期的结束时间:23:59:59.999
    selectCalendar.add(Calendar.DAY_OF_MONTH, 1);
    long endTime = selectCalendar.getTimeInMillis() - 1;

    for (ProductModel p : myDatabase.getAllReport()) {
        long productDate = p.getDate();
        // 只要数据库存储的时间戳在选中日期的起止区间内,就是同一天
        if (productDate >= startTime && productDate <= endTime) {
            dateList.add(p);
        }
    }
    adapter.setFilter(dateList);
}

额外优化建议

可以直接在SQLite查询时就过滤对应日期的数据,不用先查全量再遍历过滤,数据量大的时候性能提升明显,SQL语句可以写SELECT * FROM 表名 WHERE date >= ? AND date <= ?,把上面算的startTime和endTime作为参数传入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:03