【问题标题】:RRULE google-rfc-2445 with hour and seconds带有小时和秒的 RRULE google-rfc-2445
【发布时间】:2013-04-10 17:12:27
【问题描述】:

我正在使用实现 google-rfc-2445 (https://code.google.com/p/google-rfc-2445/) 来生成应该在事件之后重复的日期,而不是作为规则指示 (RRULE) 重复完成并注意时间,即下次我也扔时计算日期。

example:
Start Date: 17/04/2013 8:30 a.m.
Rule: "RRULE: FREQ = DAILY; UNTIL = 20130430T083000Z, INTERVAL = 1"
Expected Result, Next Repetition: 4/18/2013 8:30 a.m.
Result Obtained, Next Repetition: 4/18/2013 00 00 00

这是我正在使用的代码

 LocalDate start = new LocalDate(System.currentTimeMillis());

            String ical = "RRULE:FREQ=DAILY;"
                    + "UNTIL=20130430T083000Z;"
                    + "INTERVAL=1;";

            //Next Notification
            Date f = null;

            for (LocalDate date
                    : LocalDateIteratorFactory.createLocalDateIterable(ical, start, false)) {
                 f  = date.toDateTimeAtCurrentTime().toLocalDate().toDate();
                break;
            }

            System.out.println("Next = " + f);

打印结果是 下一个 = 2013 年 4 月 17 日星期三 00:00:00 COT

是“BYHOUR = 8; BYMINUTE = 05; BYSECOND = 10”的存在,而不是如何使用,如果可以帮忙,谢谢。

【问题讨论】:

  • 您的 RRULE 似乎格式不正确。它包含逗号,其中应该有分号和多余的空格。您使用的确切规则是什么?
  • 规则:频率 = 每日;直到 = 20130430T083000Z,间隔 = 1
  • 我在您的代码示例中看到了String ical,其中包含正确的标点符号。

标签: java jodatime rfc2445 rrule rfc5545


【解决方案1】:

LocalDateIteratorFactory 生成没有对应时间的日期,但听起来你想要 DateTimes。请改用DateTimeIteratorFactory

还有,

LocalDate start = new LocalDate(System.currentTimeMillis());

可能不等于

Start Date: 17/04/2013 8:30 a.m.

你可能想使用DateTime

DateTime start = new DateTime(2013, 4, 17, 8, 30, 0);

最后,如果你最终想要的是,没有理由使用 Joda 时间兼容层

Date f = null;

只需改用java.util compatibility layer

我建议坚持 Joda 时间,因为 java.util 日期一团糟。

【讨论】:

  • 还有一个问题,是否可以在RRULE中注明开始时间? , 对于没有 DateTime 开始,而是从当前日期开始。
  • @GustavoSalgado,否。RFC-2445 要求两者都指定 RRULE 的行为,但没有指定组合它们的语法。
  • 对于服务然后 "BYHOUR = 8; BYMINUTE = 05; BYSECOND = 10" ?
猜你喜欢
  • 2015-08-10
  • 2012-10-11
  • 2021-06-13
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
相关资源
最近更新 更多