如何获得重复事件的实时性



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

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);
} 

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

日志

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

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

示例:如果重复事件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

从日历提供程序文档中,有三件事与Events有关,其中之一就是Instances

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

实例:此表包含每次事件发生的开始和结束时间。此表中的每一行都表示一个事件。对于一次性事件,存在实例到事件的1:1映射。对于重复发生的事件,会自动生成对应于该事件多次出现的多行。

(强调矿)

在重复事件的情况下,Events.DTSTART是指整个事件的开始时间。

另一方面,Instances.BEGINInstances.END是指事件每次发生时的开始和结束时间。

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

最新更新