2011-09-07 103 views
13

維基百科給出repeating intervalISO 8601示例的一個示例: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發生什麼事嗎?

+0

對於沒有特定開始或結束日期的「時間間隔」,我創建了一個基於ISO 8601的格式。它用於這些[JavaScript](https://github.com/smhg/date-frequency-js)和[PHP](https://github.com/smhg/date-frequency-php)庫。在你的例子中「每週一13:00:00」寫成「F1D/WT13H0M0S」。 1h間隔(持續時間)可以獨立存儲。 – smhg

+0

@smhg你有一份概述你的擴展的文檔嗎?如果是這樣,我真的很想閱讀它,如果沒有,讓我們來製作一個! – kzh

+1

基於Mu Mind的回答,我一直在閱讀RFC 5545的[RRULE](http://tools.ietf.org/html/rfc5545#section-3.3.10)(iCalendar)。我的格式取決於外部過濾功能以進行更高級的操作(例如,在奇數週的10:00:00每天F(奇數)W/ET10H0M0S)。 RRULE允許你指定一切內聯,但它不能被人讀取(不知道rfc)。在我的使用案例中,這是我願意做出的折衷。所以我會用這個現有的標準重寫這兩個庫。 – smhg

回答

7

該標準本身沒有說明,但唯一明顯的解釋是間隔重複連續。所以這個循環間隔:

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中做到這一點,那麼會產生大量的功能請求)

+0

你會如何解讀「R2/P1M/2008-03-01T13:00:00Z」(持續時間和結束日期)?你認爲它與「R2/2008-02-01T13:00:00Z/P1M」相同嗎? – Melanie

+0

沒有。這意味着重複在那一天結束,但是無限延續到過去。 –

+0

由於指定了'[n]'的數量,我將其解釋爲意味着它不會在時間上無限回退。 –