1

日付の値から、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)
4

2 に答える 2

1

あなたがコメントで言ったように、一連の制約からルールを作成するためにまだ見つけたモジュールはありません。可能な場合は、BYDAY ではなく RDATE を検討してください。

別のオプションは次のとおりです。

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 も含まれている場合は注意してください

于 2012-11-02T20:35:53.470 に答える
0

これを行う自然な方法は (iCalendar ライブラリを作成している場合を除きます)、文字列の解析と生成を行う代わりに、オブジェクトとして繰り返しルールなどを処理するメソッドを持つ既存の iCalendar ライブラリを使用することです。

そのようなライブラリがない可能性もありますが、その場合は運が悪いです。しかし、最初にすべきことは、それを探すことです。

PyPIで簡単に検索すると、多くの可能性が見つかります。最初のiCalendarは、「iCalendar ファイルのパーサー/ジェネレーター」と説明されており、良い候補のように思えます。ドキュメントにざっと目を通すか、単にpip installそれを操作して、必要なことができるかどうかを確認してください。

于 2012-10-31T21:20:59.887 に答える