【问题标题】:How to list / extract all the recurring events from the ics file from RRULE in Android?如何在 Android 中从 RRULE 的 ics 文件中列出/提取所有重复事件?
【发布时间】:2023-09-08 18:32:01
【问题描述】:

我正在开发一个应用程序,它从calendar.ics 文件中读取所有事件,然后显示所有事件。我的代码适用于单个事件,并且我能够从文件中提取所有事件,因为它包含所有事件。 但是当我创建重复事件时,我无法获取除第一个事件之外的所有事件,因为calendar.ics 文件包含"RRULE" 而不是所有事件。 我已经尝试过"rfc2445.jar",但它没有用,或者我不知道如何使用它...... 是否有任何库/代码/方法/函数可以帮助我解析和显示所有事件?

 CalendarBuilder builder = new CalendarBuilder();
 Calendar calendar = null;
 calendar = builder.build(file);
 Log.d("RRULE 1: ", component.getProperty("RRULE").getName());
 Log.d("RRULE 2: ", component.getProperty("RRULE").getValue());
 Log.d("RRULE 3: DTSTART: ",component.getProperty("DTSTART").getValue());
 Log.d("RRULE 4: DTEND: ", component.getProperty("DTEND").getValue());
.......

上面是我的代码的sn-p,我得到了以下结果

D/RRULE 1:: RRULE
D/RRULE 2:: FREQ=DAILY;COUNT=184
D/RRULE 3: DTSTART:: 20160701T170000
D/RRULE 4: DTEND:: 20160701T200000 

我不知道如何解析来自 FREQ 的所有事件?

【问题讨论】:

    标签: java android icalendar recurrence rrule


    【解决方案1】:

    您可以使用我们的库lib-recur

    (非常)基本用法(不考虑时区)如下:

    RecurrenceRule rule = new RecurrenceRule(component.getProperty("RRULE").getValue());
    DateTime start = DateTime.parse(component.getProperty("DTSTART").getValue());
    int maxInstances = 100; // limit instances for rules that recur forever
    RecurrenceRuleIterator it = rule.iterator(start);
    while (it.hasNext() && (!rule.isInfinite() || maxInstances-- > 0))
    {
        DateTime nextInstance = it.nextDateTime();
        // do something with nextInstance
    }
    

    该库还支持多个RRULEs、EXRULEs、EXDATEs、RDATEs 和时区。

    【讨论】:

    • 谢谢@Marten,我找到了另一个库。但是那个图书馆没有给我重复活动的结束日期,我可以通过使用你的图书馆来获得它吗?例如,从 2 月 1 日至 2 月 30 日每天重复活动;开始时间 11:00 pm - 结束时间 01:00 am,我可以得到活动的结束日期吗?在这种情况下,事件的开始日期和结束日期将不同。
    • 我们的图书馆只能告诉您重复集中最后一个事件的开始。但是您可以将开始和结束之间的毫秒数添加到最后一个事件的结束。
    最近更新 更多