我有兩個條目:
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
我有兩個條目:
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
你的第一步應該是看蟒蛇日期時間庫。
總體而言,你的第一個解決方案可以是這個樣子:
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')
非常感謝。確實有見地 –
使用內置的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')
序功能,它會去是這樣的:
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)
你期望的輸出是什麼? – Volatility
請參閱更新的問題請 –
這應該有所幫助:http:// stackoverflow。com/questions/993358 /在python中創建一個日期範圍 –