循环事件有多个属性需要设置,还要计算接下来发生的时间,但是在iCalendar标准中,这些循环设置,最终都化作为一个RRule格式的字符串(关于RRule格式的标准,我们可以参见http://www.kanzaki.com /docs/ical/rrule.html)。 既然是以DDay.iCal来生成ics文件,那么想必这个组件也有解析RRule格式和生成RRule格式的方法。下面就说说如果使用DDay.iCal处理RRule。 一、RRule的解析 DDay.iCal中有个RecurrencePattern对象,该对象可以用于描述循环设置。 的生成 RRule还是通过RecurrencePattern来设置循环的属性,然后使用ToString方法就能够获得RRule字符串了。
>>> from dateutil import rrule 生成一个连续的日期列表 >>> list(rrule.rrule(rrule.DAILY,dtstart=parse('2018-11-1 (2018, 11, 5, 0, 0)] 只要周六和周日的 >>> list(rrule.rrule(rrule.DAILY,byweekday=(rrule.SA,rrule.SU),dtstart ('2018-11-10')).count() 10 某个日期到今天相差多少天 >>> rrule.rrule(rrule.DAILY,dtstart=parse('2018-11-1'),until >> rrule.rrule(rrule.MONTHLY,dtstart=parse('2018-3-15'),until=parse('2018-11-20')).count() 9 >>> rrule.rrule (rrule.YEARLY,dtstart=parse('2016-3-15'),until=parse('2018-2-10')).count() 2 >>> rrule.rrule(rrule.YEARLY
在Python中获取日期和时间很简单,主要使用time和datetime包 1、获取当前时间并格式化 from dateutil import rrule from datetime import datetime 2、str转日期 from dateutil import rrule from datetime import datetime import time #str转日期 #第一种方式 initDate 计算天差,此外还有 星期(WEEKLY),年(YEARLY) days = rrule.rrule(freq = rrule.DAILY,dtstart=firstDay,until=endDay) print('相差:',days.count(),'天') 此处主要使用到了dateutil的rrule。 #rrule-examples
2、时间差计算:我们可以使用第三方库 dateutil中的rrule.count函数来实现。 %m')print(start.month) rrule.rrule(rrule.MONTHLY,dtstart=start,until=end).count() 3、每月累积计算:在这里,我们可以使用 %m") month_count= rrule.rrule(rrule.MONTHLY,dtstart=start,until=end).count() #计算总月份数 if end list_month
在dateutil中,吸引我的东西有2个,1个是parser,1个是rrule。 其中parser是根据字符串解析成datetime,而rrule是则是根据定义的规则来生成datetime。 12:00:00,I feel good",fuzzy=True)#fuzzy开启模糊匹配,过滤掉无法识别的时间日期字符 datetime.datetime(2013, 8, 20, 12, 0) 关于rrule rrule(self, freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, >>from dateutil.rrule import * >>list(rrule(DAILY,dtstart=parse('2013-08-01'),until=parse('2013-08-07
那就需要在需要匹配的字符串后面加上ignoretz=True rrule模块 rrule模块可以计算并生成一些重复的时间规则,提供对iCalendar RFC中的一些标准的支持。 举个简单的例子。 import pprint from dateutil.rrule import rrule, MONTHLY from datetime import datetime start_date = datetime (2014, 12, 31) l = list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) pprint.pprint(l) 输出结果 [datetime.datetime
END:VCALENDAR 设置日历周期性重复 # 重复规则 rrule (Recurrence Rule): RRULE:FREQ=WEEKLY;WKST=SU;UNTIL=20190917T133000;INTERVAL=1;BYDAY=TU 重复规则 rrule (Recurrence 'timeZone': 'America/Los_Angeles', }, 'recurrence': [ # 'RRULE :FREQ=DAILY;COUNT=2' # 'RRULE:FREQ=WEEKLY' # 每周重复 # 'RRULE:FREQ=WEEKLY
Anaconda下该库已经安装,模块里有parser、easter、relativedelta、rrule等实用类进行时间处理。 0),dt) #得到一个时间间隔 relativedelta(NOW, johnbirthday) #得到一个人的年龄 #下周五对应的时间 dt+relativedelta(weekday=FR) rrule rrule的主要参数有: •freq:声明序列重复的周期;•count:生成多少个时间对象;•dtstart:开始的时间点; list(dateutil.rrule.rrule(freq=dateutil.rrule.MONTHLY (""" DTSTART:20201207T090000 RRULE:FREQ=DAILY;INTERVAL=10;COUNT=4 """)) #效果同上,rrulestr是根据字符串规则生成时间序列 rrule.rrulestr()是把字符串输入当参数。
模块包含的属性 datetime模块 date类 time类 datetime类 timedelta类 tzinfo类 pytz模块 时区转换 夏令时处理 dateutil模块 parser.parse() rrule.rrule 2016-09-14 00:00:00 2016-09-14 00:00:00 2016-09-09 00:00:00 2016-09-14 12:00:00 2016-11-12 00:00:00 rrule.rrule rrule(self, freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth
RRULE 事件重复规则。比如:"FREQ=WEEKLY;COUNT=10;WKST=SU"。 更多示例请查看 RFC5545。 RDATE 事件重复的日期。 通常是把 RDATE 与 RRULE 结合起来定义一组重复规则。详情请参阅 RFC5545 说明。 AVAILABILITY 标明该事件是在空闲时参与调度,还是在忙时参与。 对于要重复发生的事件,必须包含 DURATION 及 RRULE ,或者是 RDATE。 请注意,如果是通过 INSERT 来插入事件的,则本条规则不适用。 正如 利用 Intent 插入事件 一节所述,这时可使用 RRULE 及 DTSTART 、DTEND 的组合, Calendar 应用会自动转换为持续时间。 下面给出一个插入事件的例子。 Events.RRULE 事件重复执行的规则。 Events.ACCESS_LEVEL 事件是私有的还是公开的。 Events.AVAILABILITY 事件是在忙时计时,还是空闲时计时。
时间序列 Delorean中生成一组时间值使用的是stops,源码里用到了dateutil模块的rrule方法,设定的参数包括: •freq:两个时间点之间的时间间隔,声明序列重复的周期;写法是delorean.DAILY
模块包含的属性 datetime模块 date类 time类 datetime类 timedelta类 tzinfo类 pytz模块 时区转换 夏令时处理 dateutil模块 parser.parse() rrule.rrule 2016-09-14 00:00:00 2016-09-14 00:00:00 2016-09-09 00:00:00 2016-09-14 12:00:00 2016-11-12 00:00:00 rrule.rrule rrule(self, freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth
datetime.datetime(2003, 9, 25, 10, 49, 41, tzinfo=tzoffset(None, -10800)) 再看一个: >>> list(rrule
Prefer the RRULE: property whenever possible. 尽可能优先使用 RRULE: 属性。 =0 END:VEVENT" 例如,“每天早上”应写为:schedule="BEGIN:VEVENT RRULE:FREQ=DAILY;BYHOUR=9;BYMINUTE=0;BYSECOND=0 END name title: string, // Schedule using the VEVENT format per the iCal standard like BEGIN:VEVENT // RRULE prompt: string, // 自动化的标题,用作描述性名称 title: string, // 使用 iCal 标准的 VEVENT 格式进行排程,如 // BEGIN:VEVENT // RRULE jawbone_id: string, // Schedule using the VEVENT format per the iCal standard like BEGIN:VEVENT // RRULE
dateutil还提供了relativedelta,用于计算两个日期时间之间的时差或从日期时间添加/删除,rrule用于创建重复日期时间,tz用于处理时区以及其他工具。
例如,relativedelta类允许在日期和时间上进行相对的加减运算,rrule类可以生成重复事件的日期序列,parser.isoparse函数可以解析带有时区的ISO 8601
/1/2021 1:10 AM", random.random())) Output: 02/25/2020 08:26 AM 67查找从今天开始的第一个星期一的日期 from dateutil.rrule import rrule, WEEKLY, MO from datetime import date next_monday = rrule(freq=WEEKLY, dtstart=date.today
datetime.datetime(2018, 4, 29, 17, 45) dateutil 还提供了像 relativedelta 的工具,它用于计算两个日期时间之间的时间差或向日期时间添加或删除时间,rrule
datetime.datetime(2018, 4, 29, 17, 45) dateutil 还提供了像 relativedelta 的工具,它用于计算两个日期时间之间的时间差或向日期时间添加或删除时间,rrule
from datetime import datetime >>> from dateutil.relativedelta import relativedelta >>> from dateutil.rrule