ISO 8601重复间隔

时间:2011-09-07 19:23:12

标签: datetime intervals iso8601

维基百科提供了ISO 8601repeating interval示例示例:

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

这就是这个意思:

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

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

2 个答案:

答案 0 :(得分:8)

标准本身并未澄清,但这里唯一明显的解释是间隔重复背靠背。所以这个反复出现的间隔:

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中完成,那么这将产生一系列进一步的功能请求)

答案 1 :(得分:0)

是的,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 年开始)。