我正在使用 google-rfc2445 库 (com.google.ical) 来解析 RRULE。
在下面的测试中,规则 UNTIL 设置为过去(1999 年),dtStart 设置为现在。我期待 0 结果,但不知何故得到 1 结果,这看起来像 dtStart。我傻眼了,为什么它包含了 UNTIL 绑定之外的项目。这是预期的行为吗?
@Test
public void testRruleExpiryInPast1() {
String rruleString = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=19990103T000000Z";
DateTime startDate = DateTime.now(DateTimeZone.UTC);
System.out.println("startDate timeZone =" + startDate.getZone());
try {
DateTimeIterable localDateIterable = DateTimeIteratorFactory.createDateTimeIterable(rruleString, startDate, startDate.getZone(), false);
DateTimeIterator iterator = localDateIterable.iterator();
while (iterator.hasNext()) {
DateTime next = iterator.next();
System.out.println(next);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
上述测试输出
startDate timeZone =UTC
2022-02-06T18:52:31.000Z
更新1:根据这个答案,谷歌日历中的 ICAL 有额外的事件,无论 UNTIL 是否在过去,似乎 DTSTART 总是第一次出现。我觉得这很奇怪。现在我求助于正则表达式解析 rrule 字符串来确定是否存在 UNTIL 以及是否存在过去。:(