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

Возможный дубликат:
Итерация через ряд дат в 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') 
  • Сортировка списка для формирования максимально возможного числа
  • Есть ли способ проверить с помощью Python unittest assert, если итерабельность не пуста?
  • ранжирование позиций в списке терминов
  • Ошибка Json.dump с 'должен быть unicode, а не str' TypeError
  • Создавать канонический «родительский» продукт в Django Oscar программно
  • Как преобразовать Mat из opencv в формат caffe
  • Unpickling python2 datetime под python3
  • Как получить короткое имя Windows в python?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.