Android数据库 - 表现得很奇怪?

时间:2012-08-13 11:14:29

标签: android

我希望在特定日期之间进行搜索。例如,从2012年8月1日到2012年8月13日。根据此条件搜索,我会在DB中输入值。如果我在2012年8月2日完成,那么查询将返回null ...甚至更奇怪的是,当我选择第10,11或12日时,它工作正常并给我结果......我疯狂地想知道问题出在哪里可能和调试没有引导我任何地方....请帮忙吗?

/**query to get the details by giving all the dates/
public Cursor getName_Intime_Outtime_Date(String fromdate,String todate)
   {
    Log.d("pavan","in side the getnameintime out time date() of visistor adapter");
   return this.db.query(DATABASE_TABLE_VISITOR,
      new String[]{KEY_NAME,KEY_CHECKIN,KEY_CHECKOUT,KEY_DATE},
      KEY_DATE + " BETWEEN ? AND ?", 
      new String[] {fromdate ,todate}, 
      null, null, null, null);
   }

3 个答案:

答案 0 :(得分:0)

Sqlite没有日期的数据类型。可能您将日期保存为TEXT为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
我建议您将表中的日期字段保存为sqlLite数据类型INTEGER作为Unix时间,自1970-01-01 00:00:00 UTC以来的秒数,或者BIGINT(长java时间版本)以毫秒计。)

这样,当BETWEEN与数字一起使用时,您将返回一个corect值。

修改
您可以使用date and time functions从查询中管理日期字符串。这意味着你仍然可以将日期用作字符串,但是当在sql WHERE子句中使用stringDates时,使用转换函数执行强制转换为“DATE”。

答案 1 :(得分:0)

试试这个,它对我有用,SELECT * FROM table_name 其中substr(column_name,7)|| substr(column_name,4,2)|| substr(column_name,1,2)       在'YYMMDD'和'YYMMDD'之间,日期应该是相反的顺序,例如:如果日期格式是DD / MM / YY或DD-MM-YY,你可以使用'YYMMDD'

答案 2 :(得分:0)

感谢大家真正关注这个...终于解决了这个使用此链接中的想法https://groups.google.com/forum/?fromgroups#!topic/android-developers/Ey_4rBZx2t0%5B1-25%5D ....总结我做的是采取Calendar对象,使用Calendar检索当前日期对象,将检索到的数据提供给simpledateformat对象,并对其进行比较....以下是示例代码...

int test = date_pick.getMonth()+1;
     Toast.makeText(getBaseContext(), "Date seleted month"+test+"/"+date_pick.getDayOfMonth()+"/"+date_pick.getYear(), Toast.LENGTH_LONG).show();

      Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));  
        cal.set(Calendar.YEAR, date_pick.getYear());
        cal.set(Calendar.MONTH, test);
        cal.set(Calendar.DAY_OF_MONTH, date_pick.getDayOfMonth());

       /* retriving the yyyy mm dd values here*/
         set_year = cal.get(Calendar.YEAR);
         set_month= cal.get(Calendar.MONTH);
         set_day = cal.get(Calendar.DAY_OF_MONTH);
         Log.d("kunal","datesis "+set_year+" "+set_month+" "+set_day);
         string_date = set_year+"-"+set_month+"-"+set_day;


     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
     try {
       d1 = sdf.parse(string_date);
      Log.d("kunal","date came "+d1);
      System.out.println(sdf.format(d1));      

     } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
      date_txt.setText(sdf.format(d1));