我看了一下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.datetime
,即使我們通過dtstart
和until
類型datetime.date
,如上所述。我讓map
將它們提供給date
的isoformat
函數,它只是將它們轉換爲字符串,就好像它們只是沒有任何時間信息的日期。
因此,表面上看似乎等價列表理解
[day.isoformat()
for day in rrule(MONTHLY, dtstart=date(2010, 8, 1), until=date.today())]
會回到像
['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']
列表因此,如果我們想用一個列表理解,而不是map
,我們必須這樣做
[dt.date().isoformat()
for dt in rrule(MONTHLY, dtstart=date(2010, 8, 1), until=date.today())]
Ani,這幾乎是正確的,但您必須以ISO格式顯示的方式格式化日期時間。這可以通過追加isoformat來完成。你應該將行改爲'result.append(current.isoformat())' - [編輯:沒有看到你把格式化作爲練習......但是哦。] –
謝謝,我其實已經' result.append(datetime.strftime(current,'%Y-%m-01'))'得到我想要的格式。 – Richard