2012-07-03 3 views
5

Ситуация: Я пытаюсь построить простой метод, который принимает два разных целых числа, которые представляют две разные даты. 20120525 на 25 мая 2012 г. и 20120627 на 26 июня 2012 г. в качестве примера. Я хочу, чтобы этот метод возвращал список этих целых типов, которые представляют все дни между двумя параметрами даты.Как получить все даты (месяц, день и год) между двумя датами в python?

Вопрос: Могу ли я получить какие-либо предложения о том, как это сделать и как обрабатывать месяцы 28, 29, 30 или 31 дней в каждом. Я думаю, что могу сделать это, извлекая числа как целые числа через деление/modding степеней 10, а затем увеличивая эти числа как таковые с конкретными условиями выше, но я чувствую, что должен быть более простой способ сделать это.

ответ

19

Вам не нужно изобретать велосипед. Просто разобрать строки в объекты даты и времени, и пусть питона сделать математику для вас:

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

Тиль 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') 
Смежные вопросы