我运行了很多 RRULE 只是为了测试性能谷歌-rfc-2445(Java 实现IETF RFC 2445 日历).
我发现在某些情况下我在方法的返回列表中得到了开始日期。
测试非常简单:
private static void runGoogleTests() throws ParseException
{
DateTimeZone dtz = DateTimeZone.UTC;
DateTime dtStart = new DateTime("2014-11-22T00:00:00Z", dtz);//SATURDAY
DateTimeIterable dti = DateTimeIteratorFactory.createDateTimeIterable("RRULE:FREQ=WEEKLY;COUNT=10;BYDAY=MO", dtStart, dtz, true);
System.out.println("Size of iterable = " + Iterators.size(dti.iterator()));
for(DateTime dateTime : dti)
{
System.out.println(dateTime);
}
}
工厂返回的列表返回这个列表。
第一个日期是开始日期,而不应该是星期六。 RRULE 还包含 COUNT=10 那么为什么返回 11 呢?
Size of iterable = 11
2014-11-22T00:00:00.000Z
2014-11-24T00:00:00.000Z
2014-12-01T00:00:00.000Z
2014-12-08T00:00:00.000Z
2014-12-15T00:00:00.000Z
2014-12-22T00:00:00.000Z
2014-12-29T00:00:00.000Z
2015-01-05T00:00:00.000Z
2015-01-12T00:00:00.000Z
2015-01-19T00:00:00.000Z
2015-01-26T00:00:00.000Z
使用 Google-rfc-2445 的人一定遇到过这个问题吗?
我在项目页面上发布了这个问题,但那里非常安静。链接到 google-rfc-2445 页面上的问题
RFC2445 第 4.3.10 节重复规则指定
[...] COUNT 规则部分定义了对重复进行范围限制的出现次数。 “DTSTART”属性值(如果指定)将计为第一次出现。 [...]
所以虽然存在DTSTART
返回列表中的内容是正常的,不太期望的是返回列表的大小。
鉴于 RFC2445 规范,更有意义的是DTSTART
作为重复的第一个实例,也确保其他日历正确理解 ical 文件。
还需要注意的是RFC2445
已被淘汰RFC5545
其中还指定了DTSTART
作为第一个实例RRULE
(甚至强调它,注意:添加的词always(重点是我加上的)
RFC5545 RRULE 部分:COUNT 规则部分定义了对重复进行范围限制的出现次数。 “DTSTART”属性值always算作第一次出现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)