17

Wikipedia 给出了一个重复间隔的ISO 8601示例:

R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M

这就是这个意思:

  • R5表示斜线后的间隔重复5次。
  • 2008-03-01T13:00:00Z表示间隔从这个给定的日期时间开始。
  • P1Y2M10DT2H30M表示间隔持续
    • 1年
    • 2个月
    • 10天
    • 2小时
    • 30分钟

我的问题是我不知道这里重复了什么。重复是否在间隔结束后立即发生?我可以指定每周一的 13:00 到 14:00 发生一些事情吗?

4

3 回答 3

10

标准本身并没有澄清,但这里唯一明显的解释是间隔是背靠背重复的。所以这个循环间隔:

R2/2008-03-01T13:00:00Z/P1Y2M10DT2H30M

将等同于这些非重复间隔:

2008-03-01T13:00:00Z/P1Y2M10DT2H30M
2009-05-01T15:30:00Z/P1Y2M10DT2H30M

(注意:我的阅读是重复的次数确实包括第一次出现)

在 ISO 8601 中无法表示“每周一,从 13:00 到 14:00”,但是对于 iCalendar 格式的 VEVENT 来说是很自然的。(如果您可以完全在 ISO 8601 内做到这一点,那么这将引发一系列进一步的功能请求)

于 2011-09-17T16:46:02.957 回答
2

是的,ISO8601 确实定义了一个规则的重复间隔(或者像“月”一样规则可以作为单位之一)。

R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M

应该产生这些时间:

2009-05-11T15:30:00Z
2010-07-21T18:00:00Z
2011-10-01T20:30:00Z
2012-12-11T23:00:00Z
2014-02-22T00:30:00Z

它没有像 RFC5545 (iCalendar) 那样定义“开始时间”和“结束时间”,甚至没有像 RRULE 或 crontab 那样定义不规则的重复。

您应该能够使用 ISO 周日期作为起点来指定每周重复,但您需要单独重复“开始”和“结束”时间:

R/2021-W01-1T13:00:00Z/P1W
R/2021-W01-1T14:00:00Z/P1W

第一个间隔是开始时间:星期一 13:00(从 2021 年开始),第二个间隔是结束时间:星期一 14:00(从 2021 年开始)。

于 2021-04-07T20:09:12.273 回答
0

我可能是个白痴(Long Covid Brain),但 ISO-8601 的明显扩展不是第二个持续时间部分吗?在没有第二个持续时间的情况下,重复是背靠背的,在它存在的情况下,实际重复的是每个周期开始时较小的持续时间事件。例如

R/2021-W01-1T13:00:00Z/P1W/P1H

  • 从 2021 年第 1 周开始,每周一下午 1 点无限期重复一小时的时段。

编辑:也许你甚至可以嵌套它们......

R/2021-W01-1T09:00:00Z/P1W/R5/P1D/P8H

  • 每周一到周五,早上 9 点到下午 5 点?好的,我去拿我的外套
于 2022-02-20T12:17:30.237 回答