Неконвертированные данные остаются после форматирования - PullRequest
0 голосов
/ 15 сентября 2018

Я смотрел на другие вопросы, касающиеся strptime и Unconverted Data Remain, но изо всех сил пытался понять, где я ошибаюсь в коде.

            currentTime = format(currentTime, '%H:%M:%S')
            #remove the current time from phone time
            timeDifferenceValue = datetime.datetime.strptime(str(currentTime), FMS) - datetime.datetime.strptime(
                str(ptime) + ":00", FMS)
            else:
                time_left = time_left[-7:]
                time_leftHatch = datetime.datetime.strptime(time_left, FMS) - timeDifferenceValue
                time_leftHatch = format(time_leftHatch, '%H:%M:%S')

При этом обнаружена ошибкаstage:

                                        time_leftHatch = datetime.datetime.strptime(time_left, FMS) - timeDifferenceValue

Значения timeleft и timeDifference Значение:

time_left = 1:29:47 timeDifferenceValue = 0: 13: 31

Ошибка: не преобразованаостаются данные: 47

Джон в комментариях упомянул, что я должен изменить, удалите чрезмерное использование strptime, когда это не нужно.Похоже, это решило проблему неконвертированных остатков данных.

Например, timeDifferenceValue уже было в формате времени, так что его вообще не нужно было менять.

Есть идеи?

1 Ответ

0 голосов
/ 15 сентября 2018

Непосредственная проблема заключается в следующем:

datetime.datetime.strptime("0:"+str(time_left), FMS)

Я не уверен, почему вы добавляете "0:", но это приводит к "0: 1: 29: 47", для которого ваш формат strptime анализирует только первые три значения. Ошибка «не преобразованные данные» сообщает вам, что во входной строке есть некоторая дополнительная информация, которую строка формата не обрабатывает.

Лучшее решение состоит в том, чтобы прекратить жаловаться и раздражать, что будет продолжать вызывать у вас горе. У вас уже есть некоторые подсказки об использовании timedelta в вашем коде. Взятие разницы между временами в Python возвращает timedelta, а добавление timedelta к времени возвращает новое время. Таким образом, вы получите структурированные данные и четко определенные результаты.

Например,

# do this early, don't go back to string
phone_time = datetime.datetime.strptime(ptime + ':00', FMS)

# and leave this a datetime instead of stringifying it later
currentTime = datetime.datetime.now() + timedelta(hours=1)

# now you can just take the difference
timeDifferenceValue = currentTime - ptime

И

if str(timeDifferenceValue).__contains__("-"):

становится

if timeDifferenceValue < timedelta(0):

Надеюсь, что вас направят в правильном направлении!

...