Написал свою первую программу на Python, был бы признателен за вклад в увеличение пользовательского ввода

Я пишу функцию, чтобы спросить пользователя о дате. Я бы хотел, чтобы пользователь мог вводить дату в привычном формате: ММ-ДД-ГГГГ

Я пробовал несколько вариантов, но не смог вычислить разницу в днях при расчете дельты. Мои попытки вернули ряд ошибок, в основном из-за того, что я не могу передать аргументы str при попытке вычислить разницу.

Каков наилучший способ получить ввод даты в формате MM-DD-YYYY при вычитании .today(), который возвращает YYYY-MM-DD, в конечном итоге возвращая количество дней между двумя датами?

Спасибо за любой вклад! (с использованием .PY 3.6)

Примечание: приведенный ниже код РАБОТАЕТ, но не учитывает соглашение о форматировании даты в США.

def get_days_since_last_app():
    then = datetime.strptime(input("What is the date of your last credit "
                    "card application? e.g. YYYY-MM-DD - 2017-07-26 "), '%Y-%m-%d')
    today = datetime.today()
    delta = then - today
    print(abs(delta.days))
    return abs(delta)

Вот код, который НЕ работает, когда пользователь может вводить дату в формате MM-DD-YYYY. Я безуспешно пробовал использовать обе переменные между int и str.

Error:
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str'


Code:
def get_days_since_last_app():
    then = datetime.strptime(input("What is the date of your last credit "
                        "card application? e.g. MM-DD-YYYY - 07-26-2017 "), 
'%m-%d-%Y')
    today = arrow.now().format('MM-DD-YYYY')
    delta = then - today
    print(arrow.now().format('MM-DD-YYYY'))
    print(delta)
    print(abs(delta.days))
    return abs(delta)

person Caleb    schedule 22.02.2018    source источник
comment
Мои попытки привели к ряду ошибок: Пожалуйста, включите сообщение об ошибке complete.   -  person DYZ    schedule 22.02.2018
comment
Возможно, вам придется выполнить некоторые проверки ввода и изменить способ форматирования введенного времени. И поиграй с '%Y-%m-%d'   -  person Chuk Ultima    schedule 22.02.2018
comment
Мои попытки вернули ряд ошибок, это недостаточно точное описание ошибки, чтобы мы могли вам помочь. Что не работает? Как это не работает? Какие проблемы у вас есть с вашим кодом? Вы получаете сообщение об ошибке? Что такое сообщение об ошибке? Результат, который вы получаете, не тот результат, которого вы ожидаете? Какой результат вы ожидаете и почему, какой результат вы получаете и чем они отличаются? Является ли поведение, которое вы наблюдаете, не желаемым поведением? Каково желаемое поведение и почему, каково наблюдаемое поведение и чем они отличаются?   -  person Jörg W Mittag    schedule 22.02.2018
comment
My attempts have returned a number of errors — это то, что сказал бы пользователь, а не то, что сказал бы программист.   -  person jsotola    schedule 22.02.2018
comment
Здесь я разрешаю пользователю вводить MM-DD-YYYY, но получаю сообщение об ошибке при попытке вычесть arrow.now() из введенной даты. Ошибка: TypeError: неподдерживаемые типы операндов для -: 'datetime.datetime' и 'str' Код: def get_days_since_last_app(): then = datetime.strptime(input(Какова дата вашего последнего заявления на кредитную карту? например, MM -ДД-ГГГГ - 26-07-2017 ), '%m-%d-%Y') today = arrow.now().format('MM-DD-YYYY') delta = then - сегодня print(arrow. now().format('MM-DD-YYYY')) вернуть абс (дельта)   -  person Caleb    schedule 22.02.2018


Ответы (1)


def get_days_since_last_app():
    then = pd.to_datetime(datetime.strptime(input("What is the date of your last credit "
                    "card application? e.g. YYYY-MM-DD - 2017-07-26 "), '%Y-%m-%d'))

    today = pd.to_datetime(datetime.now().strftime('%Y-%m-%d'))
    delta = (then - today)
    print(delta.days)

Я попытался написать код на основе вопроса. Это то, что вы ищете?

person Jhonny    schedule 22.02.2018