2014-11-11 7 views
0

Мой текущий код:Как вычесть сегодняшнюю дату с датой ввода?

import datetime 
from time import strptime 
leapyear = 0 

isValid = False 
while not isValid: 
    in_date = input(" Please in put a year in the format dd/mm/yyyy ") 
    try: 
     d = strptime(in_date, '%d/%m/%Y') 
     isValid=True 
    except: 
     print ("This is not in the right format") 

diff = d -datetime.date.today() 
print(in_date) 
print(d) 
print(diff) 

Я не могу вычесть две даты, дату ввода и текущую дату друг от друга. Он выбрасывает исключение TypeError: unsupported operand type(s) for -: 'time.struct_time' and 'datetime.date'.

Любые идеи, почему?

ответ

0

Объекты модуля datetime поддерживают только вычитание с другими объектами из той же библиотеки. Модуль timestruct_time Кортеж не является одним из них.

Используйте datetime.datetime.strptime() class method разобрать дату вместо:

d = datetime.datetime.strptime(in_date, '%d/%m/%Y') 

затем использовать datetime.date() methodизвлечь толькоdate объекта из результата:

diff = d.date() - datetime.date.today() 

В результате datetime.timedelta instance.

Не поймать все исключений; поймать только те, брошенной strptime(), когда передается строка, которая не соответствует ожидаемому формату, ValueError:

while True: 
    in_date = input(" Please in put a year in the format dd/mm/yyyy ") 
    try: 
     d = datetime.datetime.strptime(in_date, '%d/%m/%Y').date() 
     break 
    except ValueError: 
     print ("This is not in the right format") 

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

+0

После получения дней, как я могу получить возврат в формате dd/mm/yyy? – user3077551

+0

@ user3077551: определите «месяцы» с точки зрения разницы здесь. –

+0

@ user3077551: см. [Расчет разницы между двумя датами datetime.date() в годах и месяцах] (http://stackoverflow.com/q/12564077) –

Смежные вопросы