我的开始日期为datetime(2015, 01, 01)
,我希望我的程序可以在每个步骤中升级到下个月的第一个月,它将会执行此操作几十年,但要解决它只是在做它一年了。它在while
循环中的原因是因为我还想根据月份和年份进行一些报废。这是我写的代码:
import datetime
dayS = 01; monthS = 01; yearS = 2015 #Start date
dayE = 01; monthE = 01; yearE = 2016 #End date
SDate = datetime.date(yearS, monthS, dayS)
EDate = datetime.date(yearE, monthE, dayE)
Date = []
while SDate <= EDate:
Date.append(SDate.strftime('%d/%m/%Y'))
if SDate.strftime('%m') == '02':
step = datetime.timedelta(days=28)
if SDate.strftime('%m') == '09' or '04' or '06' or '11':
step = datetime.timedelta(days=30)
if SDate.strftime('%m') == '01' or '03' or '05' or '07' or '08' or '10' or '12':
step = datetime.timedelta(days=31)
SDate += step
print Date
但我得到的结果是['01/01/2015', '01/02/2015', '04/03/2015', '04/04/2015', '05/05/2015', '05/06/2015', '06/07/2015', '06/08/2015', '06/09/2015', '07/10/2015', '07/11/2015', '08/12/2015']
,正如您所看到的那样,几个月内它并没有添加正确的天数。
非常感谢任何帮助!
答案 0 :(得分:4)
你所拥有的是经典的“或”问题。
"foo" == "1" or "2"
将始终返回True
,因为它被解析为:
("foo" == "1") or "2"
| |
False or "2"
|
"2"
请注意,在这种情况下,您最好使用datetime.date.replace
。
while SDate <= EDate:
if SDate.month < 12:
SDate = SDate.replace(month=SDate.month + 1)
else:
SDate = SDate.replace(month=1, year=SDate.year + 1)