我需要从我的日期值创建带BYDAY参数的RRULE字符串。
有没有自然的方法呢?
我为此目的编写了这个实用程序代码:
import calendar
fweek_fday, mdays = calendar.monthrange(date.year, date.month)
# Get weekday of first day and total days in current month
mweeks = ((mdays+fweek_fday-1)//7)+1
# Get total weeks in current month
mday, wday = date.day, date.weekday()
# Get current day of month and current day as day of a week
week_days = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']
week = ((mday+fweek_fday-1)//7)+(1 if wday>=fweek_fday else 0)
# Get current week no
week = -1 if week == mweeks else week
wday = week_days[wday]
output = "BYDAY=%d%s" % (week, wday)
答案 0 :(得分:1)
正如你在评论中所说,我还没有发现任何模块可以从一组约束中做出规则。 如果你有可能,你可以考虑RDATE而不是去BYDAY。
另一种选择是:
import datetime
(y,w,d ) = date.isocalendar()
#w will be the iso week number, d the day of week
(y2,wb,d2) = datetime.datetime(date.year,date.month,1).isocalendar()
wkcount = 1 if d>=d2 else 0
# you need to account whether your date is a weekday after the one of the first of the month or not
print "BYDAY=%d%s"%(w-wb+wkcount,date.strftime("%a").upper()[0:2])
但是,如果您的规则还包括WKST
,请小心答案 1 :(得分:0)
除非您正在编写iCalendar库,否则执行此操作的自然方法是使用预先存在的iCalendar库,该库具有处理重复规则等的方法,而不是进行字符串解析和生成。
可能没有这样的图书馆,在这种情况下你运气不好。但你要做的第一件事就是寻找一个。
quick search at PyPI提出了许多可能性。第一个iCalendar被描述为“iCalendar文件的解析器/生成器”,听起来像是一个很好的候选者。浏览文档,或只是pip install
并使用它,看它是否可以做你想要的。