2012-07-03 31 views
5

情況: 我想構建一個簡單的方法,接受兩個不同的整數,代表兩個不同的日期。以2012年5月25日20120525和2012年6月26日20120627爲例。我希望此方法返回這些整數類型的列表,它們表示兩個日期參數之間的所有日期。如何獲取python中兩個日期之間的所有日期(月,日和年)?

問題: 我可以就如何做到這一點以及如何處理每個月的28,29,30或31天的任何建議獲得任何建議。我想我可以這樣做,通過分割/修改10的冪數來提取整數,然後按照上面的特定條件增加這些數字,但我覺得必須有一個更簡單的方法來做到這一點。

回答

19

您不必重新發明輪子。只是解析字符串轉換爲datetime對象,然後讓Python爲你做數學題:

from dateutil import rrule 
from datetime import datetime 

a = '20120525' 
b = '20120627' 

for dt in rrule.rrule(rrule.DAILY, 
         dtstart=datetime.strptime(a, '%Y%m%d'), 
         until=datetime.strptime(b, '%Y%m%d')): 
    print dt.strftime('%Y%m%d') 

打印

20120525 
20120526 
20120527 
… 
20120625 
20120626 
20120627 
+5

TIL dateutil.rrule。 – DSM

2

另一種解決方案,而無需使用rrule放在這裏:

import datetime 

d1 = datetime.date(2015, 1, 1) 
d2 = datetime.date(2015, 2, 6) 
days = [d1 + datetime.timedelta(days=x) for x in range((d2-d1).days + 1)] 

for day in days: 
    print(day.strftime('%Y%m%d')) 

輸出:

20150101 
20150102 
20150103 
<snip> 
20150205 
20150206 
0

您可以使用pandas.date_range

import pandas 

pd.date_range('2012-05-25', '2012-06-27', freq='D') 

將產生,

DatetimeIndex(['2012-05-25', '2012-05-26', '2012-05-27', '2012-05-28', 
       '2012-05-29', '2012-05-30', '2012-05-31', '2012-06-01', 
       ... 
       '2012-06-22', '2012-06-23', '2012-06-24', '2012-06-25', 
       '2012-06-26', '2012-06-27'], 
       dtype='datetime64[ns]', freq='D') 
相關問題