ちょうどそれを見て、私はあなたがする必要があると思う:
- は、各フィールドの許容値を含む5つのアレイにクロン仕様を解析します。
- 各フィールドの値に 'now'を解析します。
- 分の順、{日の月または曜日}、現在の値と一致するかまたはそれを超える最小の配列値を見つけ、桁上がりを修正します。
曜日と曜日を同時に処理する方法がわかりません。私は方法があると確信していますが、一方で、私は実際に両方を指定した仕様を見たことはないと思います。いずれかのハンドラを作成し、両方を受け取った場合はエラーをスローするだけで十分だと思います。
編集:曜日と日の-月が両方指定されている場合は明らかに、両方に起動するようになっている - ルールは「15日、水曜日のであれば、すなわちそれが起動します毎週水曜日に15:30毎にととなります。
croniterパッケージには、あなたが欲しいものを行います。
import croniter
import datetime
now = datetime.datetime.now()
sched = '1 15 1,15 * *' # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)
for i in range(4):
nextdate = cron.get_next(datetime.datetime)
print nextdate
プリント
2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00
それは実際のイテレータとして書かれていた場合、それはいいだろうが。たぶん私は次のプロジェクトを持っています;-)
私はこのようなことをしており、正しいことをするのは難しいと感じました(そして、私の可能な「スペック」はあなたのサブセットです)。私はちょうど日時計算と関数のそれぞれの 'タイプ'の仕様でそれをしました。私は誰かがより良い答えを持っている場合は興味があります(ソリューションはおそらくuse library:xになります) – Gerrat
spec形式の例を挙げてください。 – aaronasterling