2013-01-11 48 views
4
循环

可能重复:
Iterating through a range of dates in Python创建了两个日期

我有两个条目:

date1 = 2004.09.25 
date2 = 2004.10.08 

我想用Python写了一个脚本,该脚本识别日期范围并打印出来。这样的事情:

for i in range(date1:date2): 
    print i 

我是否需要定义特定日期格式的日期? 预期的输出是这样的:

2004.09.25 
2004.09.26 
. 
. 
. 
2004.10.08 
+2

你期望的输出是什么? – Volatility

+0

请参阅更新的问题请 –

+0

这应该有所帮助:http:// stackoverflow。com/questions/993358 /在python中创建一个日期范围 –

回答

15

你的第一步应该是看蟒蛇日期时间库。

总体而言,你的第一个解决方案可以是这个样子:

date1 = datetime.date(2004, 9, 25) 
date2 = datetime.date(2004, 10, 8) 
day = datetime.timedelta(days=1) 

while date1 <= date2: 
    print date1.strftime('%Y.%m.%d') 
    date1 = date1 + day 

(有一点要注意:这显然揍你date1变量)

我以后会重构为一个日期范围功能,这使你可以做更接近你做的事情;它看起来像

for d in daterange(date1, date2): 
    print d.strftime('%Y.%m.%d') 

后来,当你开发你的Python的技能,它可以像这样的:

for i in range((date2 - date1).days + 1): 
    print (date1 + datetime.timedelta(days=i)).strftime('%Y.%m.%d') 

还是这个,这是我的最终版本:

def daterange(d1, d2): 
    return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1)) 

for d in daterange(date1, date2): 
    print d.strftime('%Y.%m.%d') 
+0

非常感谢。确实有见地 –

2

使用内置的datetime模块。

首先,通过各.分割你的时间(假设它是一个字符串),并通过列表来datetime.date

date1 = datetime.date(*date1.split('.')) 
date2 = datetime.date(*date2.split('.')) 

然后得到每个日期的ordinal(天数自1月1日0001)

date1 = date1.toordinal() 
date2 = date2.toordinal() 

然后,使用for循环,并fromordinal功能的顺序转换为日期

for i in range(date1, date2 + 1): 
    print date.fromordinal(i).strftime('%Y.%m.%d') 

全部放在一起:使用

date1 = datetime.date(*date1.split('.')).toordinal() 
date2 = datetime.date(*date2.split('.')).toordinal() 
for i in range(date1, date2 + 1): 
    print date.fromordinal(i).strftime('%Y.%m.%d') 
2

序功能,它会去是这样的:

import datetime 

DATE1 = datetime.date(2004,9,25) 
DATE2 = datetime.date(2004,10,8) 
D1 = datetime.date.toordinal(DATE1) 
D2 = (datetime.date.toordinal(DATE2))+1 


for i in range(D1,D2): 
    print datetime.date.fromordinal(i)