SQLite 未根据日期返回正确的记录



我在一个安卓应用程序上有四个按钮。每个按钮查询一个SQLite数据库并根据日期抓取记录。(按钮为'Today', 'Week', 'Month', 'All')

日期在我的表中存储为DATETIME,我也用日期查询它。一切都很好,直到我把上个月之前完成的所有工作都抓起来。

今天是2016年6月29日

我在2016年6月16日在我的SQLite数据库中创建了一个条目,并成功存储。我在2016年6月27日创建了另一个条目,并成功存储。

现在我按下'Today'按钮并返回0条记录。(正确)

我按下周键并返回1条记录(正确-创建于6月27日)

我按下月份按钮并返回0条记录。(不正确的。我应该得到2条记录)

这是我对数据库使用的查询:

String queryString = "SELECT * FROM job_quote_lookup WHERE created_at >= '" + date + "' ORDER BY created_at ASC"

'date'的计算方法如下:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -31);
Date fromDate = cal.getTime();
date = dateFormat.format(fromDate);

(31表示一个月内可能的最大天数)

似乎当日期向后一个月时,问题就出现了。如果我删除20天而不是31天,那么日期将是"6月9日",我将收到我应该收到的两份记录。但如果日期进入5月,我将收到0条记录。

我尝试过的其他查询字符串

String queryString = "SELECT * FROM job_quote_lookup WHERE created_at >= date('now','-31 days') ORDER BY created_at ASC"

这似乎不工作?

我还是Android的新手,所以如果这是一个糟糕的问题,我很抱歉。我用谷歌搜索了一下,但没有找到任何可能有帮助的东西。

UPDATE: Extra Info

下面是一些可能更有帮助的附加代码

用于在我的SQLite中标记时间条目的dateFormat是:

private String getDateTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd/MM/yyyy - HH:mm", Locale.getDefault()); //"yyyy-MM-dd HH:mm:ss" - "dd-MM-yyyy HH:mm:ss"
    Date date = new Date();
    return dateFormat.format(date);
}

当我查询数据库时使用的日期格式是:

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

我不确定这是否正确,但是我离开"HH:mm"的理由是由于"Today"选项不能正常工作,因为它会返回比当前时间大的所有内容(显然在时间戳方面没有任何内容)

无法解决…最后将我的数据库DATETIME转换为INTEGER并以毫秒为单位存储日期,然后在日期格式和毫秒之间转换以查询和显示信息

如果您想更改Java Calendar对象的月份,您将需要使用:

cal.add(Calendar.MONTH, -1);

,上面的代码片段将把月份回滚1。例如,如果您在2月15日调用cal.add(Calendar.DATE, -31),您会得到一个奇怪的结果,因为月份不会改变,但日期会转过去。

更新:

还必须确保你输入MySQL的日期格式是正确的。MySQL希望日期格式为YYYY-MM-DD,所以使用如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(cal.getTime());

如果您希望使用复杂的日历操作,我建议使用JodaTime。

相关内容

  • 没有找到相关文章

最新更新