Создание цикла для двух дат

Возможный дубликат:
Итерация через ряд дат в 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 

3 Solutions collect form web for “Создание цикла для двух дат”

Первым шагом должен был взглянуть на библиотеку datetime python.

В целом, ваше первое решение может выглядеть примерно так:

 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 вашу переменную date1 )

Я бы позже реорганизовал это в функцию daterange, чтобы вы могли сделать что-то ближе к тому, что вы сделали; это было бы похоже

 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') 

используя ординальные функции, он будет выглядеть примерно так:

 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) 

Используйте встроенный модуль datetime .

Во-первых, разделите свои даты (при условии, что это строка) по каждому . и передать списки в datetime.date

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

Затем получите ordinal каждой из дат (количество дней с 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') 
  • Произвольный сон в ожидании потока с тайм-аутом
  • EOFError случайно появился при использовании PYTTSX, и мой код теперь постоянно вызывает эту ошибку? Он работал отлично за несколько часов до
  • Как исправить ширину бара на этом участке matplotlib
  • Список блокировок
  • Pandon pandas: добавить новые столбцы на основе существующего значения столбца и установить значение новых столбцов как 1 или 0
  • Запись данных в формате unicode в csv
  • Является ли каталог Scripts анти-шаблоном в Python? Если да, то каков правильный способ импорта?
  • PyInstaller новичок: привет мир
  • Python - лучший язык программирования в мире.