【发布时间】:2026-01-25 17:45:01
【问题描述】:
我正在做一个 Android 应用程序,它会为当前日期和过去 7 天之间的日期生成销售报告。效果很好,代码如下:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR,-7);
String currentDate = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String sevenDayAgo = sdf.format(calendar.getTime());
Cursor weeklyIncome = db.getResult("select sum(price) as total_income from sales where date between '"+sevenDayAgo+"' and '"+currentDate+"'");
Cursor weeklyCost = db.getResult("select sum(purchase_price * quantity) as total_cost from sales where date between '"+sevenDayAgo+"' and '"+currentDate+"'");
比如说currentDate = 31-08-2018 和sevenDayAgo = 24-08-2018 这一切都很好,但是当我将系统日期更改为下个月的第二天并且currentDate 变为01-09-2018 时,查询不会从数据库,它应该返回25-08-2018 和01-09-2018 之间的记录,这之间有7天。不知何故,当 7 天在两个不同的月份时,查询不起作用。我不知道发生了什么以及如何解决它。
附言sales 表中的date 列的类型为TEXT。
【问题讨论】:
-
添加DAY_OF_YEAR 是错误的;相反,您应该使用 add 和 DATE,下面详细解释...
-
顺便考虑扔掉长期过时且臭名昭著的麻烦
SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .与它一起工作要好得多。另外LocalDate.toString会给你例如2018-09-01,它可以作为字符串排序,因此无需格式化程序就可以解决你的问题。
标签: android sqlite date android-sqlite