我正在尝试编写一个Android应用,它将返回两个日期之间定义的日历的所有事件。
我在网上发现了很多关于读/写事件的tutos,但没有解释如何明确使用Events table info。实际上,我能够返回在所需间隔之间开始或结束的所有事件,但结果不包含重复事件。嗯,确实如此,但只有在间隔中包含dtstart日期时才会这样做。如果在该间隔期间发生该重复事件的发生,则不会显示该事件。
所以,我的问题是:是否有一种简单的方法可以在日期间隔中返回尚未开始的重复事件,但在日期间隔中会出现 < / STRONG>?或者我 - 我不得不爬进rrule和rdate公式为每个日历的重复事件找出是否在间隔之间设置了事件(女巫在我看来非常复杂)? 下面的代码使我能够在午夜03/13/19和1984年中午03/13/19之间返回事件,以获取id = 5的日历。
Calendar cal = Calendar.getInstance();
cal.set(1984, 2, 13, 0, 0, 0);// 13 MARS 1984!!!
long calMilSec = cal.getTimeInMillis();
String[] l_projection = new String[]{"title", "dtstart", "dtend", "rrule"};
Cursor l_managedCursor = this.managedQuery(l_eventUri, l_projection, "calendar_id="+5+" AND dtstart>" + (calMilSec) + " AND dtstart<" + (calMilSec+43200000), null, "dtstart ASC");
if (l_managedCursor.moveToFirst()) {
int l_cnt = 0;
String l_title;
long l_begin;
long l_end;
String l_rrule;
StringBuilder l_displayText = new StringBuilder();
int l_colTitle = l_managedCursor.getColumnIndex(l_projection[0]);
int l_colBegin = l_managedCursor.getColumnIndex(l_projection[1]);
int l_colEnd = l_managedCursor.getColumnIndex(l_projection[2]);
int l_colRule = l_managedCursor.getColumnIndex(l_projection[3]);
do {
l_title = l_managedCursor.getString(l_colTitle);
l_begin = l_managedCursor.getLong(l_colBegin);
l_end = l_managedCursor.getLong(l_colEnd);
l_rrule = l_managedCursor.getString(l_colRule);
Date dateB = new Date(l_begin);
Date dateE = new Date(l_end);
SimpleDateFormat dateFormat = new SimpleDateFormat ("E-dd-MMM:HH:mm:ss-yyyy");
dateFormat.format(dateB);
dateFormat.format(dateE);
l_displayText.append(l_title + "\n" + dateB + "\n" + dateE + "\n" + l_rrule + "\n----------------\n");
++l_cnt;
} while (l_managedCursor.moveToNext() );
calName = calName + l_displayText.toString();
}
testText.setText(calName);
非常感谢。