Datetime ISO 8601重复间隔

Datetime ISO 8601重复间隔,datetime,intervals,iso8601,Datetime,Intervals,Iso8601,维基百科给出了一个例子: 这就是它的意思: R5表示斜杠后的间隔重复5次 2008-03-01T13:00:00Z表示间隔从给定的日期时间开始 P1Y2M10DT2H30M表示间隔时间为 一年 2个月 10天 2小时 30分钟 我的问题是,我不知道这里到底在重复什么。重复吗 间隔结束后立即发生?我可以指定每个星期一从13:00到14:00发生的事情吗?标准本身没有明确说明,但这里唯一明显的解释是时间间隔背靠背重复。所以这个循环周期: R2/2008-03-01T13:00:00Z/P1Y

维基百科给出了一个例子:

这就是它的意思:

  • R5
    表示斜杠后的间隔重复5次
  • 2008-03-01T13:00:00Z
    表示间隔从给定的日期时间开始
  • P1Y2M10DT2H30M
    表示间隔时间为
    • 一年
    • 2个月
    • 10天
    • 2小时
    • 30分钟
我的问题是,我不知道这里到底在重复什么。重复吗
间隔结束后立即发生?我可以指定每个星期一从13:00到14:00发生的事情吗?

标准本身没有明确说明,但这里唯一明显的解释是时间间隔背靠背重复。所以这个循环周期:

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中完全做到这一点,那么这将产生大量的进一步的功能请求)

是的,ISO8601确实定义了一个定期的重复间隔(或者定期的“月”可以是一个单位)

应在以下时间生成:

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周日期作为起点指定每周重复,但“开始”和“结束”时间需要单独重复:


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

对于没有特定开始或结束日期的“时间间隔”,我创建了基于ISO 8601的格式。它在这些和图书馆中使用。在您的示例中,“每周一13:00:00”写为“F1D/WT13H0M0S”。1h间隔(持续时间)可以独立存储。@smhg您有概述扩展的文档吗?如果是的话,我真的很想读,如果不是的话,让我们做一个!我一直在根据Mu Mind的答案阅读RFC 5545(iCalendar的)。我的格式取决于更高级操作的外部过滤功能(例如,在奇数周内,每天10:00:00使用F(奇数)W/ET10H0M0S)。RRULE允许您内联指定所有内容,但人类无法读取(不知道rfc)。在我的用例中,这是我愿意做出的权衡。因此,我将使用现有标准重写这两个库。您如何解释“R2/P1M/2008-03-01T13:00:00Z”(持续时间和结束日期)?你认为它和“R2/2008-02-01T13:00:00Z/P1M”一样吗?不。这意味着重复会在那个日期结束,但会无限延续到过去。由于指定了
[n]
的数量,我将其解释为它不会无限追溯到过去。
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
R/2021-W01-1T13:00:00Z/P1W
R/2021-W01-1T14:00:00Z/P1W