2016-09-21 41 views
2

我有幾個字符串屬性,在MainGenerator類中添加了自定義類型java.util.Date。 在querybuilder如何將這些字符串與ge或le或gt或lt進行比較。 我保存字符串類型的分貝值和我比較像他們這樣Android的GreenDao - 如何比較兩個日期字符串?

qb.queryBuilder().where(TestDao.Properties.Date_entered.ge(start)).list();

它不工作。

+0

start的樣本值是多少? – Zartha

回答

2

如果您正在使用greenDao然後在MainGenerator你必須有這樣的qb.queryBuilder().where(TestDao.Properties.Date_entered.ge(start)).list(); 開始日期爲

testdao.addDateProperty("date_entered").notNull(); 

應該java.util.Date

1

日期被持久化爲long類型的時間戳。因此,對於您的查詢參數,您還應該使用長整型值。

+0

你可以放下一個例子嗎? – user1810931

+0

所以在這個查詢qb.queryBuilder()。其中​​(TestDao.Properties.Date_entered.ge(start)).list()開始應該是long值? – user1810931

+0

您可以使用Date或Long(即。date.getTime())。他們都工作。這是[在文檔中解釋](http://greenrobot.org/greendao/documentation/queries/#Custom_Types_as_Parameters)。如果您好奇,請查看「WhereCondition」類的源代碼。 –

0

可以串日期轉換成毫秒,可以爲你的結果比較值:

public boolean checkDates(String date1, String date2) { 
      long milliDate1 = getMilliFromDate(date1); 
      long milliDate2 = getMilliFromDate(date2); 

      //Check date according to your requirement and condition 
      return milliDate1 < milliDate2; 
     } 

     public long getMilliFromDate(String dateFormat) { 
      Date date = new Date(); 
     // "dd/MM/yyyy" this is date format i use you can use your own 
     //format which you are storing in local database like time stamp "yyyy-MM-dd HH:mm:ss" 
      SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
      try { 
       date = formatter.parse(dateFormat); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
      return date.getTime(); 
     } 
1

首先解析字符串中的日期作爲您在數據庫字符串格式保存日期。然後查詢數據。這裏是示例代碼。

SimpleDateFormat dateFormat; 
Calendar calendar = Calendar.getInstance(); 
//Modify Calendar here according to your requirement. 

dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 
//Check if you have different date format then replace in above line. 

String dateString = dateFormat.format(calendar.getTime()); 

//Then query your data 
qb.queryBuilder().where(TestDao.Properties.Date_entered.ge(dateString)).list(); 
+0

@ user1810931 waqas ali如果您輸入的日期是dateProperty,並且您執行此解決方案,您將得到此異常。非法的日期值:預期的java.util.Date或長期的價值.....所以我不認爲這是正確的答案 – Zartha

+0

我想我已經在上面已經提到,如果您在字符串中保存日期此解決方案是有效的格式。您需要重新閱讀第一個答案。 –