拉魯爾?
RRULE模塊提供了對中記錄的重復規則的小型、完整且非??焖俚膶崿F iCalendar RFC ,包括對結果緩存的支持。
Classes?
- class dateutil.rrule.rrule(freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth=None, bymonthday=None, byyearday=None, byeaster=None, byweekno=None, byweekday=None, byhour=None, byminute=None, bysecond=None, cache=False)[源代碼]?
這是rRule操作的基礎。它接受RFC中定義的所有關鍵字作為其構造函數參數(Byday除外,它被重命名為by Weekday)等等。構造函數原型為::
rrule(freq)
其中,freq必須是年、月、周、日、小時、分鐘或秒之一。
備注
根據RFC第3.3.10節,重復實例落在無效日期和時間時將被忽略,而不是強制:
重復規則可以生成具有無效日期(例如,2月30日)或不存在本地時間(例如,本地時間在凌晨1:00提前一小時的某一天的凌晨1:30)的重復實例。必須忽略此類重復實例,并且不能將其計入重復集合的一部分。
例如,當開始日期出現在月底時,這可能會導致令人驚訝的行為:
>>> from dateutil.rrule import rrule, MONTHLY >>> from datetime import datetime >>> start_date = datetime(2014, 12, 31) >>> list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) ... [datetime.datetime(2014, 12, 31, 0, 0), datetime.datetime(2015, 1, 31, 0, 0), datetime.datetime(2015, 3, 31, 0, 0), datetime.datetime(2015, 5, 31, 0, 0)]
此外,它還支持以下關鍵字參數:
- 參數:
dtstart -- 循環開始。除了作為循環的基礎外,還將從此日期提取最終循環實例中缺少的參數。如果未指定,將使用datetime.now()。
interval -- 每次頻率迭代之間的間隔。例如,使用年時,間隔為2表示每兩年一次,但使用小時時,表示每兩小時一次。默認間隔為1。
wkst -- 一周的開始日。必須是MO、TU、WE常量之一,或者是指定一周的第一天的整數。這將影響基于每周期間的重復性。默認的周開始時間是從calendar.firstWeekday()獲取的,并且可以由calendar.setfirstWeekday()修改。
count --
如果給定,這將確定將生成多少個匹配項。
備注
As of version 2.5.0, the use of the keyword
until
in conjunction withcount
is deprecated, to make suredateutil
is fully compliant with RFC-5545 Sec. 3.3.10. Therefore,until
andcount
must not occur in the same call torrule
.until --
如果給定,這必須是指定重復上限的DateTime實例。規則中的最后一次重復是小于或等于中指定的值的最大日期時間
until
參數。備注
As of version 2.5.0, the use of the keyword
until
in conjunction withcount
is deprecated, to make suredateutil
is fully compliant with RFC-5545 Sec. 3.3.10. Therefore,until
andcount
must not occur in the same call torrule
.bysetpos -- 如果給定,它必須是一個整數,或者是一個正或負整數序列。每個給定的整數將指定一個出現次數,對應于規則在頻率周期內的第n次出現。例如,bysetpos為-1,如果與每月頻率相結合,則bysetpos為(MO,TU,WE,TH,FR),這將導致每個月的最后一個工作日。
bymonth -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的月份。
bymonthday -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的月份天數。
byyearday -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的年份天數。
byeaster -- 如果給定,它必須是一個整數,或者是一個正或負整數序列。每個整數將定義與復活節星期日的偏移量。將偏移量0傳遞給byeaster將生成復活節星期天本身。這是RFC規范的擴展。
byweekno -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的周數。周數字具有ISO8601中描述的含義,即一年的第一周至少包含新年的四天。
byweekday -- 如果給定,它必須是整數(0==MO)、整數序列、工作日常量之一(MO、TU等)或這些常量的序列。給定時,這些變量將定義將應用循環的工作日。也可以將參數n用于工作日實例,這將意味著該周期中該工作日的第n次出現。例如,對于Monthly或Year和BYMONTH,在按工作日使用FR(+1)將指定發生重復的月份的第一個星期五。請注意,在RFC文檔中,它被指定為byday,但為了避免該關鍵字的歧義,將其重命名。
byhour -- 如果給定,則它必須是整數或整數序列,這意味著要對其應用遞歸的小時數。
byminute -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的分鐘數。
bysecond -- 如果給定,它必須是整數或整數序列,這意味著要對其應用遞歸的秒數。
cache -- 如果給定,它必須是指定啟用或禁用結果緩存的布爾值。如果您要多次使用同一rRule實例,則啟用緩存將顯著提高性能。
- after(dt, inc=False)?
返回給定DateTime實例之后的第一個遞歸。關鍵字INC定義如果DT是一個事件,將會發生什么情況。如果Inc=True,則如果DT本身是一個匹配項,則將返回它。
- before(dt, inc=False)?
返回給定DateTime實例之前的最后一個遞歸。關鍵字INC定義如果DT是一個事件,將會發生什么情況。如果Inc=True,則如果DT本身是一個匹配項,則將返回它。
- between(after, before, inc=False, count=1)?
返回在之后和之前之間出現的所有rRule。INC關鍵字定義如果發生在之后和/或之前本身時會發生什么。如果INC=True,則如果在循環集中找到它們,則它們將包括在列表中。
- count()?
返回此集合中的遞歸次數。如果以前沒有這樣做過,它會經歷整個循環。
- xafter(dt, count=None, inc=False)?
發電機的產量最高可達 count 在給定DateTime實例之后的遞歸,等效于 after 。
- 參數:
dt -- 開始生成遞歸的日期時間。
count -- 要生成的最大遞歸次數。如果 None (默認),將生成日期,直到循環規則用完為止。
inc -- 如果 dt 是規則的實例,并且 inc 是 True ,則它包含在輸出中。
- 收益率:
產生一系列 datetime 對象。
- class dateutil.rrule.rruleset(cache=False)[源代碼]?
rruleset類型允許更復雜的重復設置,可以混合多個規則、日期、排除規則和排除日期。類型構造函數采用以下關鍵字參數:
- 參數:
cache -- 如果為True,則將啟用結果緩存,從而顯著提高多個查詢的性能。
- after(dt, inc=False)?
返回給定DateTime實例之后的第一個遞歸。關鍵字INC定義如果DT是一個事件,將會發生什么情況。如果Inc=True,則如果DT本身是一個匹配項,則將返回它。
- before(dt, inc=False)?
返回給定DateTime實例之前的最后一個遞歸。關鍵字INC定義如果DT是一個事件,將會發生什么情況。如果Inc=True,則如果DT本身是一個匹配項,則將返回它。
- between(after, before, inc=False, count=1)?
返回在之后和之前之間出現的所有rRule。INC關鍵字定義如果發生在之后和/或之前本身時會發生什么。如果INC=True,則如果在循環集中找到它們,則它們將包括在列表中。
- count()?
返回此集合中的遞歸次數。如果以前沒有這樣做過,它會經歷整個循環。
- xafter(dt, count=None, inc=False)?
發電機的產量最高可達 count 在給定DateTime實例之后的遞歸,等效于 after 。
- 參數:
dt -- 開始生成遞歸的日期時間。
count -- 要生成的最大遞歸次數。如果 None (默認),將生成日期,直到循環規則用完為止。
inc -- 如果 dt 是規則的實例,并且 inc 是 True ,則它包含在輸出中。
- 收益率:
產生一系列 datetime 對象。
功能?
- dateutil.rrule.rrulestr(s, **kwargs)?
分析一個或一組重復規則的字符串表示形式。
- 參數:
s -- 必填項,定義一個或多個重復規則的字符串。
dtstart -- 如果指定,如果未在規則字符串中指定,則用作默認重復開始。
cache -- 如果已設置
True
將啟用結果緩存,從而顯著提高多個查詢的性能。unfold -- 如果已設置
True
表示規則字符串拆分在多行上,應在處理之前聯接。forceset -- 如果已設置
True
強制adateutil.rrule.rruleset
將被退還。compatible -- 如果已設置
True
力量unfold
和forceset
成為True
。ignoretz -- 如果已設置
True
,解析字符串中的時區將被忽略,并且一個樸素的datetime.datetime
對象,則返回。tzids -- 如果給定,則為用于檢索
datetime.tzinfo
從字符串表示形式。默認為dateutil.tz.gettz()
。tzinfos -- 可能以字符串表示形式出現的其他時區名稱/別名??匆?
dateutil.parser.parse()
了解更多信息。
- 返回:
rrule示例?
這些示例是從RFC轉換而來的。
準備好環境。
>>> from dateutil.rrule import *
>>> from dateutil.parser import *
>>> from datetime import *
>>> import pprint
>>> import sys
>>> sys.displayhook = pprint.pprint
每天10次。
>>> list(rrule(DAILY, count=10,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 3, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 9, 5, 9, 0),
datetime.datetime(1997, 9, 6, 9, 0),
datetime.datetime(1997, 9, 7, 9, 0),
datetime.datetime(1997, 9, 8, 9, 0),
datetime.datetime(1997, 9, 9, 9, 0),
datetime.datetime(1997, 9, 10, 9, 0),
datetime.datetime(1997, 9, 11, 9, 0)]
1997年12月24日前每天
>>> list(rrule(DAILY,
... dtstart=parse("19970902T090000"),
... until=parse("19971224T000000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 3, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
...
datetime.datetime(1997, 12, 21, 9, 0),
datetime.datetime(1997, 12, 22, 9, 0),
datetime.datetime(1997, 12, 23, 9, 0)]
每隔一天發生5次。
>>> list(rrule(DAILY, interval=2, count=5,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 9, 6, 9, 0),
datetime.datetime(1997, 9, 8, 9, 0),
datetime.datetime(1997, 9, 10, 9, 0)]
每10天發生5次。
>>> list(rrule(DAILY, interval=10, count=5,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 12, 9, 0),
datetime.datetime(1997, 9, 22, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0),
datetime.datetime(1997, 10, 12, 9, 0)]
一月份的每一天,連續三年。
>>> list(rrule(YEARLY, bymonth=1, byweekday=range(7),
... dtstart=parse("19980101T090000"),
... until=parse("20000131T090000")))
[datetime.datetime(1998, 1, 1, 9, 0),
datetime.datetime(1998, 1, 2, 9, 0),
...
datetime.datetime(1998, 1, 30, 9, 0),
datetime.datetime(1998, 1, 31, 9, 0),
datetime.datetime(1999, 1, 1, 9, 0),
datetime.datetime(1999, 1, 2, 9, 0),
...
datetime.datetime(1999, 1, 30, 9, 0),
datetime.datetime(1999, 1, 31, 9, 0),
datetime.datetime(2000, 1, 1, 9, 0),
datetime.datetime(2000, 1, 2, 9, 0),
...
datetime.datetime(2000, 1, 30, 9, 0),
datetime.datetime(2000, 1, 31, 9, 0)]
同樣的事情,在另一方面。
>>> list(rrule(DAILY, bymonth=1,
... dtstart=parse("19980101T090000"),
... until=parse("20000131T090000")))
[datetime.datetime(1998, 1, 1, 9, 0),
...
datetime.datetime(2000, 1, 31, 9, 0)]
每周10次。
>>> list(rrule(WEEKLY, count=10,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 9, 9, 0),
datetime.datetime(1997, 9, 16, 9, 0),
datetime.datetime(1997, 9, 23, 9, 0),
datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 10, 7, 9, 0),
datetime.datetime(1997, 10, 14, 9, 0),
datetime.datetime(1997, 10, 21, 9, 0),
datetime.datetime(1997, 10, 28, 9, 0),
datetime.datetime(1997, 11, 4, 9, 0)]
每隔一周,發生6次。
>>> list(rrule(WEEKLY, interval=2, count=6,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 16, 9, 0),
datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 10, 14, 9, 0),
datetime.datetime(1997, 10, 28, 9, 0),
datetime.datetime(1997, 11, 11, 9, 0)]
每周二和周四各一次,持續5周。
>>> list(rrule(WEEKLY, count=10, wkst=SU, byweekday=(TU,TH),
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 9, 9, 9, 0),
datetime.datetime(1997, 9, 11, 9, 0),
datetime.datetime(1997, 9, 16, 9, 0),
datetime.datetime(1997, 9, 18, 9, 0),
datetime.datetime(1997, 9, 23, 9, 0),
datetime.datetime(1997, 9, 25, 9, 0),
datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0)]
每隔一周的周二和周四,共發生8次。
>>> list(rrule(WEEKLY, interval=2, count=8,
... wkst=SU, byweekday=(TU,TH),
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 9, 16, 9, 0),
datetime.datetime(1997, 9, 18, 9, 0),
datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0),
datetime.datetime(1997, 10, 14, 9, 0),
datetime.datetime(1997, 10, 16, 9, 0)]
每月第一個星期五發生10次。
>>> list(rrule(MONTHLY, count=10, byweekday=FR(1),
... dtstart=parse("19970905T090000")))
[datetime.datetime(1997, 9, 5, 9, 0),
datetime.datetime(1997, 10, 3, 9, 0),
datetime.datetime(1997, 11, 7, 9, 0),
datetime.datetime(1997, 12, 5, 9, 0),
datetime.datetime(1998, 1, 2, 9, 0),
datetime.datetime(1998, 2, 6, 9, 0),
datetime.datetime(1998, 3, 6, 9, 0),
datetime.datetime(1998, 4, 3, 9, 0),
datetime.datetime(1998, 5, 1, 9, 0),
datetime.datetime(1998, 6, 5, 9, 0)]
每隔一個月的第一個星期天和最后一個星期天發生10次。
>>> list(rrule(MONTHLY, interval=2, count=10,
... byweekday=(SU(1), SU(-1)),
... dtstart=parse("19970907T090000")))
[datetime.datetime(1997, 9, 7, 9, 0),
datetime.datetime(1997, 9, 28, 9, 0),
datetime.datetime(1997, 11, 2, 9, 0),
datetime.datetime(1997, 11, 30, 9, 0),
datetime.datetime(1998, 1, 4, 9, 0),
datetime.datetime(1998, 1, 25, 9, 0),
datetime.datetime(1998, 3, 1, 9, 0),
datetime.datetime(1998, 3, 29, 9, 0),
datetime.datetime(1998, 5, 3, 9, 0),
datetime.datetime(1998, 5, 31, 9, 0)]
每月的第二至最后一個星期一,為期6個月。
>>> list(rrule(MONTHLY, count=6, byweekday=MO(-2),
... dtstart=parse("19970922T090000")))
[datetime.datetime(1997, 9, 22, 9, 0),
datetime.datetime(1997, 10, 20, 9, 0),
datetime.datetime(1997, 11, 17, 9, 0),
datetime.datetime(1997, 12, 22, 9, 0),
datetime.datetime(1998, 1, 19, 9, 0),
datetime.datetime(1998, 2, 16, 9, 0)]
每月的第三天到最后一天,為期6個月。
>>> list(rrule(MONTHLY, count=6, bymonthday=-3,
... dtstart=parse("19970928T090000")))
[datetime.datetime(1997, 9, 28, 9, 0),
datetime.datetime(1997, 10, 29, 9, 0),
datetime.datetime(1997, 11, 28, 9, 0),
datetime.datetime(1997, 12, 29, 9, 0),
datetime.datetime(1998, 1, 29, 9, 0),
datetime.datetime(1998, 2, 26, 9, 0)]
每月2號和15號發生5次。
>>> list(rrule(MONTHLY, count=5, bymonthday=(2,15),
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 15, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0),
datetime.datetime(1997, 10, 15, 9, 0),
datetime.datetime(1997, 11, 2, 9, 0)]
每月的第一天和最后一天發生3次。
>>> list(rrule(MONTHLY, count=5, bymonthday=(-1,1,),
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 10, 1, 9, 0),
datetime.datetime(1997, 10, 31, 9, 0),
datetime.datetime(1997, 11, 1, 9, 0),
datetime.datetime(1997, 11, 30, 9, 0)]
每18個月10日至15日發生10次。
>>> list(rrule(MONTHLY, interval=18, count=10,
... bymonthday=range(10,16),
... dtstart=parse("19970910T090000")))
[datetime.datetime(1997, 9, 10, 9, 0),
datetime.datetime(1997, 9, 11, 9, 0),
datetime.datetime(1997, 9, 12, 9, 0),
datetime.datetime(1997, 9, 13, 9, 0),
datetime.datetime(1997, 9, 14, 9, 0),
datetime.datetime(1997, 9, 15, 9, 0),
datetime.datetime(1999, 3, 10, 9, 0),
datetime.datetime(1999, 3, 11, 9, 0),
datetime.datetime(1999, 3, 12, 9, 0),
datetime.datetime(1999, 3, 13, 9, 0)]
每周二,每隔一個月,發生6次。
>>> list(rrule(MONTHLY, interval=2, count=6, byweekday=TU,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 9, 9, 0),
datetime.datetime(1997, 9, 16, 9, 0),
datetime.datetime(1997, 9, 23, 9, 0),
datetime.datetime(1997, 9, 30, 9, 0),
datetime.datetime(1997, 11, 4, 9, 0)]
每年6月和7月發生10次。
>>> list(rrule(YEARLY, count=4, bymonth=(6,7),
... dtstart=parse("19970610T090000")))
[datetime.datetime(1997, 6, 10, 9, 0),
datetime.datetime(1997, 7, 10, 9, 0),
datetime.datetime(1998, 6, 10, 9, 0),
datetime.datetime(1998, 7, 10, 9, 0)]
每三年第1天、第100天和第200天發生4次。
>>> list(rrule(YEARLY, count=4, interval=3, byyearday=(1,100,200),
... dtstart=parse("19970101T090000")))
[datetime.datetime(1997, 1, 1, 9, 0),
datetime.datetime(1997, 4, 10, 9, 0),
datetime.datetime(1997, 7, 19, 9, 0),
datetime.datetime(2000, 1, 1, 9, 0)]
每年的第20個星期一,發生3次。
>>> list(rrule(YEARLY, count=3, byweekday=MO(20),
... dtstart=parse("19970519T090000")))
[datetime.datetime(1997, 5, 19, 9, 0),
datetime.datetime(1998, 5, 18, 9, 0),
datetime.datetime(1999, 5, 17, 9, 0)]
第20周的星期一(其中默認的星期一開始是星期一),發生3次。
>>> list(rrule(YEARLY, count=3, byweekno=20, byweekday=MO,
... dtstart=parse("19970512T090000")))
[datetime.datetime(1997, 5, 12, 9, 0),
datetime.datetime(1998, 5, 11, 9, 0),
datetime.datetime(1999, 5, 17, 9, 0)]
第1周可能在去年。
>>> list(rrule(WEEKLY, count=3, byweekno=1, byweekday=MO,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 12, 29, 9, 0),
datetime.datetime(1999, 1, 4, 9, 0),
datetime.datetime(2000, 1, 3, 9, 0)]
而周數大于51的可能是明年。
>>> list(rrule(WEEKLY, count=3, byweekno=52, byweekday=SU,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 12, 28, 9, 0),
datetime.datetime(1998, 12, 27, 9, 0),
datetime.datetime(2000, 1, 2, 9, 0)]
只有一些年份有第53周:
>>> list(rrule(WEEKLY, count=3, byweekno=53, byweekday=MO,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1998, 12, 28, 9, 0),
datetime.datetime(2004, 12, 27, 9, 0),
datetime.datetime(2009, 12, 28, 9, 0)]
每周五13號,4次。
>>> list(rrule(YEARLY, count=4, byweekday=FR, bymonthday=13,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1998, 2, 13, 9, 0),
datetime.datetime(1998, 3, 13, 9, 0),
datetime.datetime(1998, 11, 13, 9, 0),
datetime.datetime(1999, 8, 13, 9, 0)]
每四年,即11月星期一后的第一個星期二,發生3次(美國總統選舉日):
>>> list(rrule(YEARLY, interval=4, count=3, bymonth=11,
... byweekday=TU, bymonthday=(2,3,4,5,6,7,8),
... dtstart=parse("19961105T090000")))
[datetime.datetime(1996, 11, 5, 9, 0),
datetime.datetime(2000, 11, 7, 9, 0),
datetime.datetime(2004, 11, 2, 9, 0)]
在接下來的3個月內,星期二、星期三或星期四中的一個月內的第三個實例:
>>> list(rrule(MONTHLY, count=3, byweekday=(TU,WE,TH),
... bysetpos=3, dtstart=parse("19970904T090000")))
[datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 10, 7, 9, 0),
datetime.datetime(1997, 11, 6, 9, 0)]
每月的第二個工作日到最后一個工作日,發生3次。
>>> list(rrule(MONTHLY, count=3, byweekday=(MO,TU,WE,TH,FR),
... bysetpos=-2, dtstart=parse("19970929T090000")))
[datetime.datetime(1997, 9, 29, 9, 0),
datetime.datetime(1997, 10, 30, 9, 0),
datetime.datetime(1997, 11, 27, 9, 0)]
每3小時從上午9:00到下午5:00。
>>> list(rrule(HOURLY, interval=3,
... dtstart=parse("19970902T090000"),
... until=parse("19970902T170000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 2, 12, 0),
datetime.datetime(1997, 9, 2, 15, 0)]
每15分鐘發生6次。
>>> list(rrule(MINUTELY, interval=15, count=6,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 2, 9, 15),
datetime.datetime(1997, 9, 2, 9, 30),
datetime.datetime(1997, 9, 2, 9, 45),
datetime.datetime(1997, 9, 2, 10, 0),
datetime.datetime(1997, 9, 2, 10, 15)]
每小時半發生4次。
>>> list(rrule(MINUTELY, interval=90, count=4,
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 2, 10, 30),
datetime.datetime(1997, 9, 2, 12, 0),
datetime.datetime(1997, 9, 2, 13, 30)]
每20分鐘從上午9:00到下午4:40,連續兩天。
>>> list(rrule(MINUTELY, interval=20, count=48,
... byhour=range(9,17), byminute=(0,20,40),
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 2, 9, 20),
...
datetime.datetime(1997, 9, 2, 16, 20),
datetime.datetime(1997, 9, 2, 16, 40),
datetime.datetime(1997, 9, 3, 9, 0),
datetime.datetime(1997, 9, 3, 9, 20),
...
datetime.datetime(1997, 9, 3, 16, 20),
datetime.datetime(1997, 9, 3, 16, 40)]
一個示例,其中生成的天數因 wkst .
>>> list(rrule(WEEKLY, interval=2, count=4,
... byweekday=(TU,SU), wkst=MO,
... dtstart=parse("19970805T090000")))
[datetime.datetime(1997, 8, 5, 9, 0),
datetime.datetime(1997, 8, 10, 9, 0),
datetime.datetime(1997, 8, 19, 9, 0),
datetime.datetime(1997, 8, 24, 9, 0)]
>>> list(rrule(WEEKLY, interval=2, count=4,
... byweekday=(TU,SU), wkst=SU,
... dtstart=parse("19970805T090000")))
[datetime.datetime(1997, 8, 5, 9, 0),
datetime.datetime(1997, 8, 17, 9, 0),
datetime.datetime(1997, 8, 19, 9, 0),
datetime.datetime(1997, 8, 31, 9, 0)]
rruleset示例?
每天,連續7天,星期六和星期天跳躍。
>>> set = rruleset()
>>> set.rrule(rrule(DAILY, count=7,
... dtstart=parse("19970902T090000")))
>>> set.exrule(rrule(YEARLY, byweekday=(SA,SU),
... dtstart=parse("19970902T090000")))
>>> list(set)
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 3, 9, 0),
datetime.datetime(1997, 9, 4, 9, 0),
datetime.datetime(1997, 9, 5, 9, 0),
datetime.datetime(1997, 9, 8, 9, 0)]
每周,持續4周,第7天加一次,而不是第16天。
>>> set = rruleset()
>>> set.rrule(rrule(WEEKLY, count=4,
... dtstart=parse("19970902T090000")))
>>> set.rdate(datetime.datetime(1997, 9, 7, 9, 0))
>>> set.exdate(datetime.datetime(1997, 9, 16, 9, 0))
>>> list(set)
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 7, 9, 0),
datetime.datetime(1997, 9, 9, 9, 0),
datetime.datetime(1997, 9, 23, 9, 0)]
rrulestr()示例?
每10天發生5次。
>>> list(rrulestr("""
... DTSTART:19970902T090000
... RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
... """))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 12, 9, 0),
datetime.datetime(1997, 9, 22, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0),
datetime.datetime(1997, 10, 12, 9, 0)]
同樣的事情,但是只傳遞 RRULE 價值。
>>> list(rrulestr("FREQ=DAILY;INTERVAL=10;COUNT=5",
... dtstart=parse("19970902T090000")))
[datetime.datetime(1997, 9, 2, 9, 0),
datetime.datetime(1997, 9, 12, 9, 0),
datetime.datetime(1997, 9, 22, 9, 0),
datetime.datetime(1997, 10, 2, 9, 0),
datetime.datetime(1997, 10, 12, 9, 0)]
注意,當使用單個規則時,它返回一個 rrule 實例,除非 forceset 使用。
>>> rrulestr("FREQ=DAILY;INTERVAL=10;COUNT=5")
<dateutil.rrule.rrule object at 0x...>
>>> rrulestr("""
... DTSTART:19970902T090000
... RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
... """)
<dateutil.rrule.rrule object at 0x...>
>>> rrulestr("FREQ=DAILY;INTERVAL=10;COUNT=5", forceset=True)
<dateutil.rrule.rruleset object at 0x...>
但是當一個 rruleset 如果需要,則自動使用。
>>> rrulestr("""
... DTSTART:19970902T090000
... RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
... RRULE:FREQ=DAILY;INTERVAL=5;COUNT=3
... """)
<dateutil.rrule.rruleset object at 0x...>