Что является решением этой ошибки TypeError: strptime () аргумент 1 должен быть str, а не datetime.date - PullRequest
0 голосов
/ 17 января 2020

может кто-нибудь поможет мне с моим кодом? это ошибка, которую я получил, я просто не понимаю, как я получил эту ошибку:

CurrentDate = datetime.datetime.strptime(CurrentDate, "%Y-%m-%d %H:%M")
TypeError: strptime() argument 1 must be str, not datetime.date

Полный код:

import datetime

CurrentDate = datetime.datetime.now().date()
print(CurrentDate)

Run4Start = str(CurrentDate) + " 16:00"
Run4End = str(CurrentDate) + " 20:00"
Run4Start = datetime.datetime.strptime(Run4Start, "%Y-%m-%d %H:%M")
Run4End = datetime.datetime.strptime(Run4End, "%Y-%m-%d %H:%M")
print("RUN4 :", CurrentDate )
print(Run4Start, Run4End)


CurrentDate = datetime.datetime.strptime(CurrentDate, "%Y-%m-%d %H:%M")
print(CurrentDate)

if CurrentDate >= Run4Start and CurrentDate <= Run4End:
    print("Hit")
else:
    print("Miss!")

1 Ответ

0 голосов
/ 17 января 2020

In:

CurrentDate = datetime.datetime.strptime(CurrentDate, "%Y-%m-%d %H:%M")

CurrentDate - это уже datetime.date объект, созданный выше:

CurrentDate = datetime.datetime.now().date()

и никогда не измененный на что-либо еще. Так что вам не нужно разбирать его, он уже "разобран". Просто удалите строку, пытаясь ее проанализировать.

Тем не менее, это просто date, и вы сравниваете ее с datetime s в определенный c день; работает он или нет, он не будет делать то, что вы, вероятно, пытаетесь сделать (определите, находится ли текущее время между 1600 и 2000). Вам не нужно разбирать строки, чтобы сделать это вообще; весь ваш блок тестирования кода на попадание или промах может упроститься до:

if datetime.time(16) <= datetime.datetime.now().time() <= datetime.time(20):
    print("Hit")
else:
    print("Miss!")

, поскольку вы заботитесь только о компоненте времени, а не о компоненте даты вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...