如何在android中按日期范围或月份获取日历事件
我使用下面的代码在我的应用程序中获取和加载日历事件。它工作得很好。但现在我想获取指定日期范围的事件。我怎样才能得到它如何在android中按日期范围或月份获取日历事件,android,android-calendar,Android,Android Calendar,我使用下面的代码在我的应用程序中获取和加载日历事件。它工作得很好。但现在我想获取指定日期范围的事件。我怎样才能得到它 Cursor cursor = getContentResolver().query( Uri.parse("content://com.android.calendar/events"), new String[] { "_id", "title", "dtstart", "dtend" }, null,
Cursor cursor = getContentResolver().query(
Uri.parse("content://com.android.calendar/events"),
new String[] { "_id", "title", "dtstart", "dtend" }, null,
null, "dtstart ASC");
应该是dtstart=“2013-01-01”
dtend=“2013-01-31”这是我用来检索事件的实现:
if (Integer.parseInt(Build.VERSION.SDK) >= 8 || Integer.parseInt(Build.VERSION.SDK) <= 13 ) {
uri = "content://com.android.calendar/events";
CALENDAR_URI = Uri.parse(uri);
} else if(Integer.parseInt(Build.VERSION.SDK) >= 14){
CALENDAR_URI = CalendarContract.Events.CONTENT_URI;
}
else {
uri = "content://calendar/events";
CALENDAR_URI = Uri.parse(uri);
}
Cursor cursors = context.getContentResolver().query(CALENDAR_URI, new String[]{ "_id", "title", "description", "dtstart", "dtend", "eventLocation" },
null,null, null);
cursors.moveToFirst();
String[] CalNames = new String[cursors.getCount()];
int[] CalIds = new int[cursors.getCount()];
for (int i = 0; i < CalNames.length; i++) {
CalIds[i] = cursors.getInt(0);
CalNames[i] = "Event"+cursors.getInt(0)+": \nTitle: "+ cursors.getString(1)+"\nDescription: "+cursors.getString(2)+"\nStart Date: "+new Date(cursors.getLong(3))+"\nEnd Date : "+new Date(cursors.getLong(4))+"\nLocation : "+cursors.getString(5);
Date mDate = new Date(cursors.getLong(3));
Date nDate = new Date(cursors.getLong(4));
long mTime = mDate.getTime();
long lTime = nDate.getTime();
if(stTime <= mTime && enTime >= lTime){
String eid = cursors.getString(0);
int eID = Integer.parseInt(eid);
String desc = cursors.getString(2);
String title = cursors.getString(1);
if(Integer.parseInt(Build.VERSION.SDK)>=8 | Integer.parseInt(Build.VERSION.SDK)=14){
CALENDAR\u URI=CalendarContract.Events.CONTENT\u URI;
}
否则{
uri=”content://calendar/events";
CALENDAR_URI=URI.parse(URI);
}
Cursor cursors=context.getContentResolver().query(日历URI,新字符串[]{“\u id”,“title”,“description”,“dtstart”,“dtend”,“eventLocation”},
空,空,空);
游标。moveToFirst();
String[]CalNames=新字符串[cursors.getCount()];
int[]CalIds=new int[cursors.getCount()];
对于(int i=0;i
在这种情况下,stTime将是您的dtstart,enTime将是您的dtend。String[]projection=newstring[]{CalendarContract.Events.CALENDAR_ID,CalendarContract.Events.TITLE,CalendarContract.Events.DTSTART,CalendarContract.Events.DTEND,CalendarContract.Events.ALL_DAY,CalendarContract.Events.EVENT_LOCATION};
String[] projection = new String[] { CalendarContract.Events.CALENDAR_ID, CalendarContract.Events.TITLE, CalendarContract.Events.DESCRIPTION, CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND, CalendarContract.Events.ALL_DAY, CalendarContract.Events.EVENT_LOCATION };
// 0 = January, 1 = February, ...
Calendar startTime = Calendar.getInstance();
startTime.set(2014,00,01,00,00);
Calendar endTime= Calendar.getInstance();
endTime.set(2015,00,01,00,00);
// the range is all data from 2014
String selection = "(( " + CalendarContract.Events.DTSTART + " >= " + startTime.getTimeInMillis() + " ) AND ( " + CalendarContract.Events.DTSTART + " <= " + endTime.getTimeInMillis() + " ))";
Cursor cursor = this.getBaseContext().getContentResolver().query( CalendarContract.Events.CONTENT_URI, projection, selection, null, null );
// output the events
if (cursor.moveToFirst()) {
do {
Toast.makeText( this.getApplicationContext(), "Title: " + cursor.getString(1) + " Start-Time: " + (new Date(cursor.getLong(3))).toString(), Toast.LENGTH_LONG ).show();
} while ( cursor.moveToNext());
}
//0=一月,1=二月。。。
Calendar startTime=Calendar.getInstance();
起始时间(2014,00,01,00,00);
Calendar endTime=Calendar.getInstance();
结束时间设置(2015,00,01,00,00);
//范围是2014年的所有数据
字符串选择=“(“+CalendarContract.Events.DTSTART+”>=“+startTime.getTimeInMillis()+”)和(“+CalendarContract.Events.DTSTART+"检查:这是有效的,但我建议您编写干净的代码。thnx,您节省了我的时间。是的,Erdinc,我尝试尽早这样做,但我的声誉很低。不过这是一个很好的帮助。如何为帐户id添加参数?您的答案很完美,是否有可能获得添加事件的日期。@GokulRajkumar应该有可能,您只需要使用正确的参数名称扩展“投影”。