我正在网上搜索找到满足这种需求的解决方案: 我需要按月收集'amout'数据组的总和。
我发现的是这个要求:
Cursor cursor = mDb.rawQuery("SELECT strftime('%m', date), SUM(amount) FROM " + DATABASE_TABLE + " GROUP BY strftime('%m', date)", null);
但是我拉我的头发,因为我无法从这个函数中收集任何月份strftime('%m', date);
我在网上发现,这可能来自我的数据库中的日期格式,该功能无法理解。
我的数据库中存储的实际日期是:“Thu Dec 01 00:00:00 GMT + 00:00 2016”
我使用此光标检查返回的值:
Cursor cursor = mDb.rawQuery("SELECT distinct date, strftime('%m', date) FROM " + DATABASE_TABLE, null);
在光标中(仅检查光标的第一次检查)我有:
所以我正确地收集了日期,这是转换不起作用。
编辑: 正如提议和解释的那样,我认为这种格式可能会被函数误解(显然情况就是这样)。
这是我向数据库添加日期的方法:
我用这个:dateFormat = new SimpleDateFormat("dd/MM/yyyy");
然后这一行将日期添加到我的Money对象,然后将其保存到数据库中:dateFormat.parse("01/12/2016")
答案 0 :(得分:1)
感谢Rotwang带我了解格式问题,我的问题出现在我的数据库项目创建者
中当我创建我的对象时,我只是把日期存储在我的类中(java.util.Date日期),而没有形成它。
所以日期总是以错误的格式存储。我必须在创建阶段格式化它。下面是创建我的对象并解决我的问题的代码。
dateFormat = new SimpleDateFormat("yyy-MM-dd");
再次感谢Rotwang
并且:
public void createMoney(Money money) {
ContentValues values = new ContentValues();
values.put(TITLE, money.get_title());
values.put(AMOUNT, money.get_amount());
values.put(DETAILS, money.get_details());
values.put(DATE, dateFormat.format(money.get_date()));
values.put(TYPE_FK_ID, money.get_typeFkId());
values.put(CONTACT_FK_ID, money.get_contactFkId());
values.put(REMINDER_FK_ID, money.get_reminderFkId());
mDb.insert(DATABASE_TABLE, null, values);
}