我检索两个日期之间的数据,当我选择带有月份的日期时,它如何获得正确的结果,以及如何输出空列表视图,但是当我选择一个月以上的日期时,下面的输出空列表视图是我的代码
在这里我在DB类中声明变量
public static final String EX_RowID = "_id";
public static final String EX_Cattype = "Ecattype";
public static final String EX_Date = "Ecdate";
public static final String EX_Price = "Ecprice";
public static final String EX_Type = "itype";
创建表语句
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + Food_TABLE +"(" +
EX_RowID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
EX_Cattype + " TEXT NOT NULL, " +
EX_Date + " TEXT NOT NULL," +
EX_Price + " INTEGER NOT NULL," +
EX_Type + " TEXT NOT NULL UNIQUE );"
);
}
输入数据方法
public long ExEntry(String Ecatgtype, String Edate, String Eprice, String Eitype) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(EX_Cattype, Ecatgtype);
cv.put(EX_Date, Edate );
cv.put(EX_Price, Eprice);
cv.put(EX_Type, Eitype);
return ourdatabase.insertOrThrow(Food_TABLE, null, cv);
}
在这里我访问ExEntry方法
ExMgDB Expentry = new ExMgDB(ADD_EX.this);
Expentry.open();
Expentry.ExEntry(cate, date, price, itype);
Expentry.close();
在这里,我面临着这两个日期变量之间的问题
public Cursor CstmRpot(String fd, String td) {
// TODO Auto-generated method stub
String[] columns = new String[] {EX_RowID,EX_Cattype, EX_Date, EX_Price, EX_Type };
Cursor c= ourdatabase.query(Food_TABLE, columns, EX_Date + " BETWEEN '" + fd + "'
AND '" + td + "'" , null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
我像下面这样访问
CustemRpt dbcs = new CustemRpt();
Cursor cursor = CstDB.CstmRpot(frmdate,tondate);
有两种主要解决方案。所有解决方案的共同点是,必须以某种方式对包含日期的列进行排序。如果该命令被销毁,则您的数据已损坏,查询将无法返回预期结果!
1.将“日期”另存为INTEGER
数据库中的数据,并使用一种方法将“日期”映射为数字:
一种可能的方法是用于Date.getTime ()
将日期映射到数字,但是还有许多其他方法。重要的是
这种订购方式肯定是正确的。要使用Java.util.Date.getTime()实现此目的,您只需要将日期设置为0:00:00:000即可。
例如:
"CREATE TABLE " + Food_TABLE +"(" +
EX_RowID + "INTEGER PRIMARY KEY AUTOINCREMENT, " +
EX_Cattype + " TEXT NOT NULL, " +
EX_Date + " INTEGER NOT NULL," +
EX_Price + " INTEGER NOT NULL," +
EX_Type + " TEXT NOT NULL UNIQUE );"
private static String dateOnly(java.util.Date d) {
Calendar cal = Calendar.getInstance(); // locale-specific
cal.setTime(d);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return Long.toString(cal.getTimeInMillis());
}
public Cursor CstmRpot(java.util.Date fd, java.util.Date td) {
// TODO Auto-generated method stub
String[] columns = new String[]{EX_RowID,EX_Cattype, EX_Date, EX_Price, EX_Type };
Cursor c= ourdatabase.query(Food_TABLE, columns, EX_Date + " > " + dateOnly (fd) + " AND " + EX_Date + " < " + dateOnly(td), null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
如果您不使用其他时区,则dateOnly(java.util.Date d)
可以对其进行优化。当然您也可以使用JODA-time。
2.将您的日期另存为TEXT
如果选择此方法,则比较日期列的查询会慢一些,但是数据库中的条目是人类可读的,方法1
TEXT
并非如此。-列使用BINARY排序默认情况下,这意味着memcmp()
用于比较这些值并确定哪个值更大或两个值是否相等。(记住x BETWEEN a AND b
手段x <= a AND x >= b
。)您可以检查工作memcmp()
具有这种功能memcmp()
。
为了确保获得正确的结果,必须确保以下几点:
可能的日期格式可能看起来像这样:(yyyy-MM-dd
例如2014-02-04
或2000-12-24
)。
忠告
Edittext
获取日期作为输入。问题内容: 我从Stackoverflow那里获得了这段代码,并对其进行了少许更改以适应今天的日期。 我想检查今天是否适合两个日期之间。但这是行不通的。我想念什么? 问题答案: 编辑: 使用<=或> =来计算今天的日期 这是您的代码的正确答案。只需使用strtotime()php函数
问题内容: 我正在使用数据库存储日志,其中“日期”列保存了插入日期。日期的格式为“ MM / DD / YY”。请任何人建议我如何在两个特定日期之间选择数据。例如,我尝试了这个: 但是我想这行不通,因为日期不是数字。谢谢您的帮助!:) 问题答案: 使用关键字:
问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案:
问题内容: 我已将用户注册的日期保存为日期时间,例如 2011-12-06 10:45:36 。我已运行此查询,并且希望此项目 -2011-12-06 10: 45 : 36- 将被选择: 但是不是。存在任何优雅的方式,该如何选择?我最初的想法是,但是看起来不太好。 问题答案: 您的问题是日期的简短版本使用午夜作为默认设置。因此,您的查询实际上是: 这就是为什么您看不到10:45的记录的原因。 更
问题内容: 我有这个模型: 和存储库为 我想做的是,我将传递一个日期,并需要检查该日期在和之间(例如,我将9月30日作为日期传递,并且需要查找9月30日在其和之间的所有条目) 像什么? 问题答案: 您应该看一下参考文档。很好解释。 就您而言,我认为您不能在两者之间使用,因为您需要传递两个参数 之间 -findByStartDateBetween…其中x.startDate在?1和?2之间 根据您的
问题内容: 查看两个日期之间有多少整天的最短方法是什么?这就是我现在正在做的。 问题答案: 假设您确实有两个日期对象,则可以从另一个对象中减去一个,然后查询结果对象的天数: 它也适用于日期时间-我认为它会四舍五入到最近的日期: