2013-01-11 46 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)