web-dev-qa-db-fra.com

TypeError: '>' non pris en charge entre les instances de 'datetime.datetime' et 'str'

Je suis nouveau dans les types de date et d'heure python.

J'ai une valeur de date.

date = '2018-11-10 10:55:31+00:00'

Je dois vérifier que cette valeur de date est antérieure à 90 jours.

J'ai essayé :

from datetime import datetime
from datetime import timedelta

past = datetime.now() - timedelta(days=90)
date = '2018-11-10 10:55:31+00:00'

if past > date :
   print("This is older than 90 days")

échouant avec l'erreur suivante:
TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'

Cela peut être dû au fait que le format de date pour "passé" et la valeur de date que j'ai transmise sont différents.

Comment puis-je trouver ça?

5
Ebin Davis

Vous pouvez utiliser le package dateutil et convertir simplement votre chaîne de date date en objet datetime, puis vérifier la condition avec:

from dateutil import parser
past = datetime.now() - timedelta(days=90)
new_date = parser.parse("2018-11-10 10:55:31+00:00")
if past > new_date :
    print("This is older than 90 days")

que ça:)

1
ddor254

Vous devez convertir votre chaîne de date en datetime. Vous pouvez le faire de deux manières.

Utilisez la fonction intégrée datetime.strptime

Par exemple, convertissez d'abord en datetime avant votre comparaison. Cela vous oblige à spécifier le format précisément à l'avance:

date = '2018-11-10 10:55:31+00:00'
date = datetime.strptime(date[:-6], '%Y-%m-%d %H:%M:%S')

print(date)

datetime.datetime(2018, 11, 10, 10, 55, 31)

Utiliser une bibliothèque tierce

Un outil populaire est dateutil.parser , qui est capable d'analyser les formats datetime les plus courants sans le format spécifié dans avance:

from datetime import datetime, timedelta
from dateutil import parser

past = datetime.now() - timedelta(days=90)
date1 = '2018-11-10 10:55:31+00:00'
date2 = '2017-11-10 10:55:31+00:00'

for date in (date1, date2):
    if past > parser.parse(date[:-6]):
        print(f'This is older than 90 days: {date}')

This is older than 90 days: 2017-11-10 10:55:31+00:00
1
jpp