私はdateutil
のドキュメントを見ました。それはdateutil.relativedelta
を使用するよりも、より便利な方法を提供してい判明:recurrence rules(examples)
当面の作業のために、それは我々がいる細かい印刷
注
from dateutil.rrule import *
from datetime import date
months = map(
date.isoformat,
rrule(MONTHLY, dtstart=date(2010, 8, 1), until=date.today())
)
と同じくらい簡単ですここでちょっと騙されている。
dateutil.rrule.rrule
要素は、上記のように
datetime.date
タイプの
dtstart
と
until
を渡したとしても、タイプ
datetime.datetime
です。私は
map
を
date
の
isoformat
関数に送ります。ちょうど時刻情報がないまさに日付であるかのように文字列に変換すると分かります。
したがって、一見同等のリスト内包
[day.isoformat()
for day in rrule(MONTHLY, dtstart=date(2010, 8, 1), until=date.today())]
は、私たちが代わりにmap
のリストの内包表記を使用したい場合はこのように、私たちはのような何かをしなければならない
['2010-08-01T00:00:00',
'2010-09-01T00:00:00',
'2010-10-01T00:00:00',
'2010-11-01T00:00:00',
⋮
'2015-12-01T00:00:00',
'2016-01-01T00:00:00',
'2016-02-01T00:00:00']
のようなリストを返します
[dt.date().isoformat()
for dt in rrule(MONTHLY, dtstart=date(2010, 8, 1), until=date.today())]
Ani、これはほぼ正しいですが、ISO形式で表示されるようにdatetimeをフォーマットする必要があります。 isoformatを追加することでこれを行うことができます。あなたは 'result.append(current.isoformat())'に行を変更する必要があります - [EDIT:書式を練習として残しているのを見たことはありませんでした...しかし、まあ。] –
ありがとう、 result.append(datetime.strftime(current、 '%Y-%m-01')) '私が望む形式を得るために。 – Richard