Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每两周一次/google-rfc-2445根据开始日期刷新不同的行为_Java_Icalendar_Rrule_Rfc2445_Biweekly - Fatal编程技术网

Java 每两周一次/google-rfc-2445根据开始日期刷新不同的行为

Java 每两周一次/google-rfc-2445根据开始日期刷新不同的行为,java,icalendar,rrule,rfc2445,biweekly,Java,Icalendar,Rrule,Rfc2445,Biweekly,基于启动时间的RRULE的不同行为: 您好,我目前正在尝试编写一个cron-to-rrule转换器,遇到一些特定规则的问题。 对于以下规则: “频率=年;按月=1,2,3,4,5,6,7,8,9,10,11,12;按月=日=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31;按日=苏,莫,图,我们,TH,FR,SA;按小时=0,10,20;按分钟=0” 日期迭代器的行为因指定的开始时间而

基于启动时间的RRULE的不同行为:

您好,我目前正在尝试编写一个cron-to-rrule转换器,遇到一些特定规则的问题。 对于以下规则: “频率=年;按月=1,2,3,4,5,6,7,8,9,10,11,12;按月=日=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31;按日=苏,莫,图,我们,TH,FR,SA;按小时=0,10,20;按分钟=0”

日期迭代器的行为因指定的开始时间而异:

        final String rule2 = "FREQ=YEARLY;BYMONTH=1,2,3,4,5,6,7,8,9,10,11,12;BYMONTHDAY=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31;BYDAY=SU,MO,TU,WE,TH,FR,SA;BYHOUR=0,10,20;BYMINUTE=0";
        final Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse("2019-10-01");
        final Date startDate2 = new SimpleDateFormat("yyyy-MM-dd").parse("2019-12-01");

        System.out.println("Biweekly Rule Date 1");
        final List<Date> biweeklyStartDate1 = biweeklyDates(rule2, startDate, 100);
        System.out.println("Biweekly Rule Date 1 Result Count " + biweeklyStartDate1.size());

        System.out.println("Biweekly Rule Date 2");
        final List<Date> biweeklyStartDate2 = biweeklyDates(rule2, startDate2, 100);
        System.out.println("Biweekly Rule Date 2 Result Count " + biweeklyStartDate2.size());

   private static List<Date> biweeklyDates(final String rule, final Date date, final int limit) {
        final RecurrenceRuleScribe scribe = new RecurrenceRuleScribe();
        final ParseContext context = new ParseContext();
        context.setVersion(ICalVersion.V2_0);
        final RecurrenceRule recurrenceRule = scribe.parseText("RRULE:" + rule,null, new ICalParameters(), context);
        final DateIterator iterator = recurrenceRule.getDateIterator(date, TimeZone.getTimeZone("GMT"));

        final List<Date> values  = new ArrayList<>();
        while (iterator.hasNext()) {
            final Date next = iterator.next();
            values.add(next);
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(next));
            if (values.size() >= limit) {
                break;
            }
        }
        return values;
    }

final String rule 2=“FREQ=year;BYMONTH=1,2,3,4,5,6,7,8,9,10,11,12;BYMONTHDAY=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,26,27,28,30,31;BYDAY=SU,MO,TU,WE,TH,FR,SA;BYHOUR=0,10,20;bymin=0”;
最终日期开始日期=新的简化格式(“yyyy-MM-dd”)。解析(“2019-10-01”);
最终日期startDate2=新的简化格式(“yyyy-MM-dd”)。解析(“2019-12-01”);
System.out.println(“双周规则日期1”);
最终清单双周开始日期1=双周开始日期(规则2,开始日期,100);
System.out.println(“每两周规则日期1结果计数”+biweeklyStartDate1.size());
System.out.println(“双周规则日期2”);
最终列表双周开始日期2=双周开始日期(规则2,开始日期2100);
System.out.println(“每两周规则日期2结果计数”+biweeklyStartDate2.size());
私有静态列表双周日期(最终字符串规则、最终日期、最终整数限制){
最终复发划线=新复发划线();
final ParseContext=new ParseContext();
setVersion(ICalVersion.V2_0);
final RecurrenceRule RecurrenceRule=scribe.parseText(“RRULE:+rule,null,new-ICalParameters(),context”);
final DateIterator iterator=recurrenceRule.getDateIterator(日期、时区、getTimeZone(“GMT”);
最终列表值=新的ArrayList();
while(iterator.hasNext()){
final Date next=iterator.next();
值。添加(下一步);
System.out.println(新的SimpleDataFormat(“yyyy-MM-dd”).格式(下一个));
if(values.size()>=limit){
打破
}
}
返回值;
}
在本例中,我尝试使用相同的规则检索100个事件。返回的事件因指定的开始时间而异。 第一个日期将返回预期的100个结果,第二个日期将返回一个无效事件,这似乎是开始日期。 这似乎是由一年中的最后一个月引起的,当指定另一个日期为12月时,似乎会返回相同的报税表。 Google-rfc-2445也有同样的行为,但ical4j和其他一些来自其他语言的rrule评估人员能够产生预期的结果