如何获取重复事件的实时时间?

sna*_*ggs 4 android android-calendar

我使用以下方法来获取日历的所有事件:

public Cursor getEventsCursor(Context context) {        
    long curr = System.currentTimeMillis();
    long begin = curr - DateUtils.DAY_IN_MILLIS * 30; // - 30 days
    long end = curr + DateUtils.DAY_IN_MILLIS * 30;   // + 30 days

    Cursor cur = null;
    ContentResolver cr = context.getContentResolver();

    String selection = Events.VISIBLE + "= ?";
    String[] selectionArgs = new String[] {"1"};
    String order = Events.DTSTART + " DESC";

    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, begin);
    ContentUris.appendId(builder, end);

    return cr.query(builder.build(), EVENT_PROJECTION, 
            selection, selectionArgs, order);
} 
Run Code Online (Sandbox Code Playgroud)

它有效,但是我得到所有重复事件的初始时间!

日志

Feeder milestone; eventId: 12;  date=2012-12-06 11:00:00  // initial time
Feeder milestone; eventId: 23;  date=2012-12-06 11:00:00
Feeder milestone; eventId: 178; date=2012-12-06 11:00:00
Feeder milestone; eventId: 180; date=2012-12-06 11:00:00
Run Code Online (Sandbox Code Playgroud)

如何获取重复事件的真实时间?

示例:如果重复事件Feeder milestone是每周两次的事件,则我希望:

Feeder milestone; eventId: 12;  date=2014-08-03 11:00:00
Feeder milestone; eventId: 23;  date=2014-08-27 11:00:00
Feeder milestone; eventId: 178; date=2014-09-11 11:00:00
Feeder milestone; eventId: 180; date=2014-09-25 11:00:00
Run Code Online (Sandbox Code Playgroud)

And*_* T. 5

Calendar Provider文档中,有3件相关的事情Events,其中一件是Instances

事件:此表包含事件特定的信息。该表中的每一行都包含单个事件信息,例如,事件标题,位置,开始时间,结束时间等。该事件可以发生一次,也可以多次发生。与会者,提醒和扩展属性存储在单独的表中。它们每个都有一个EVENT_ID,该EVENT_ID引用了事件表中的_ID。

实例:此表保存每次事件的开始和结束时间。该表中的每一行代表一个事件发生。对于一次性事件,实例与事件之间存在1:1的映射。对于重复发生的事件,将自动生成与该事件的多次出现相对应的多行。

(强调我的)

如果发生重复事件,则Events.DTSTART整个事件的开始时间。

在另一方面,Instances.BEGIN并且Instances.END参照的起始和结束时间每次出现的事件的。

在一般情况下,请务必使用Instances.BEGIN来方便地获取所有事件的开始时间(无论是否重复发生)。