Ical4j.RFC5545.计算事件发生次数,持续时间黑客



我检查了ical4j库。有时我需要计算事件发生次数。要计算的有用示例在这里。我试图转移start dateend date.在原始start date20101113- 2010 年 11 月,星期六(它映射在模式上见BYDAY=...SA(。我想不在乎是否开始匹配。所以我使用了值start date20101112- 2010 年 11 月,星期五(它不会在任何一天以模式映射BYDAY=MO,TU,SA(

VEvent event = new ContentBuilder().vevent {
dtstart('20101112', parameters: parameters() {value('DATE')})
dtend('20101113', parameters: parameters() {value('DATE')})
rrule('FREQ=WEEKLY;WKST=MO;INTERVAL=3;BYDAY=MO,TU,SA')
}
def dates = event.calculateRecurrenceSet(new Period('20101101T000000/20110101T000000'))
println dates

结果是

[20101112T000000Z/20101113T000000Z、20101113T000000Z/P1D、20101129T000000Z/P1D、20101130T000000Z/P1D、20101204T000000Z/P1D、20101220T000000Z/P1D、20101221T000000Z/P1D

、20101225T000000Z/P1D]

几乎符合预期(除了结果中的第一个周期20101112T000000Z/20101113T000000Z是多余的(。所以我继续研究如何排除一个。在调试模式下,我看到

result = {PeriodList@1497}  size = 8
0 = {Period@2240} "20101112T000000Z/20101113T000000Z"
duration = null
rangeStart = {DateTime@2243} "20101112T000000Z"
rangeEnd = {DateTime@2244} "20101113T000000Z"
1 = {Period@2264} "20101113T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2285} "20101113T000000Z"
rangeEnd = {DateTime@2286} "20101114T000000Z"
2 = {Period@2265} "20101129T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2290} "20101129T000000Z"
rangeEnd = {DateTime@2291} "20101130T000000Z"
3 = {Period@2266} "20101130T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2295} "20101130T000000Z"
rangeEnd = {DateTime@2296} "20101201T000000Z"
4 = {Period@2267} "20101204T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2300} "20101204T000000Z"
rangeEnd = {DateTime@2301} "20101205T000000Z"
5 = {Period@2268} "20101220T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2315} "20101220T000000Z"
rangeEnd = {DateTime@2316} "20101221T000000Z"
6 = {Period@2269} "20101221T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2310} "20101221T000000Z"
rangeEnd = {DateTime@2311} "20101222T000000Z"
7 = {Period@2270} "20101225T000000Z/P1D"
duration = {Dur@2284} "P1D"
rangeStart = {DateTime@2305} "20101225T000000Z"
rangeEnd = {DateTime@2306} "20101226T000000Z"

尤里卡!我找到了标记来检测生成的集中的冗余日期(损坏的句点具有空持续时间(。我继续处理它过滤具有空值的周期。但是过滤器什么也没过滤。继续检查...

package net.fortuna.ical4j.model;
...
public class Period extends DateRange implements Comparable<Period> {
private static final long serialVersionUID = 7321090422911676490L;
private Dur duration;
...
public final Dur getDuration() {
if (duration == null) {
return new Dur(getStart(), getEnd());
}
return duration;
}
...

如您所见,类Period具有private Dur durationpublic final Dur getDuration()。如果没有解决方法,我无法访问duration...

问题是

我该怎么办?

  1. 使用反射黑客来获得持续时间 - 丑陋的解决方案。
  2. 下载库源代码以更改类Period并重建库 - 遵循不良支持新库版本。
  3. 要求ical4j开发人员扩展Period外观 - 它需要时间来更改和发布。
  4. 使用持续时间黑客超过toString(这是不可靠的解决方案(。

我提出了问题。如果他们考虑这个问题,我会添加详细信息。

相关内容

  • 没有找到相关文章

最新更新