2013-03-18 172 views
6

我在android中查詢事件表以獲取事件。如何查詢特定日期範圍的android日曆事件?

String[] projection = new String[] { "calendar_id", "title", "description", 
        "dtstart", "dtend", "eventLocation" }; 

Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/events"), 
        projection, 
        null, 
        null, 
        null); 

這將返回所有事件。但現在我只想要在2013年4月3日至2013年3月7日的特定時間內舉辦活動。我如何使用selectionselectionArgs[]? 我想這

String selection = "((dtstart <= ?) AND (dtend >= ?))"; 
String[] selectionArgs = new String[] {startString, endString}; 

但它不返回任何東西。我的疑問是 1. Where子句是否工作?因爲,startDate和endDate首先轉換爲長(毫秒),然後轉換爲字符串,然後存儲在表中。那麼如何比較字符串的長期價值。 sqlite中沒有toNumber()函數。 2.如果我通過selectionArgs那麼startStringendString應該採用哪種格式?

+0

檢查:http://stackoverflow.com/questions/26844770/how-to-獲取日曆上的Android手機 – 2014-11-11 09:13:12

回答

7

startString & endString應該以millis方式通過。嘗試使用:

Calendar c_start= Calendar.getInstance(); 
c_start.set(2013,2,4,0,0); //Note that months start from 0 (January) 
Calendar c_end= Calendar.getInstance(); 
c_end.set(2013,2,7,0,0); //Note that months start from 0 (January) 

另外,我覺得你的邏輯是相反的,日期範圍應該是這樣的:

String selection = "((dtstart >= "+c_start.getTimeInMillis()+") AND (dtend <= "+c_end.getTimeInMillis()+"))"; 
+0

你能否詳細解答這個答案... – Deepak 2013-10-30 12:30:06

+0

這是解決方案! – 2014-11-11 08:37:04