Ошибка типа:> не поддерживается между экземплярами datetime.datetime и str. - PullRequest
0 голосов
/ 11 ноября 2018

Я новичок в Python типов даты и времени.

У меня есть значение даты.

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

Мне нужно проверить, что значение этой даты старше 90 дней.

Я пытался:

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")

не выполнено со следующей ошибкой:
TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'

Это может быть связано с тем, что формат даты для «прошлого» и значение даты, которое я передал, отличаются.

Как я могу придумать это?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Вы можете использовать пакет dateutil и просто преобразовать строку даты date в объект `datetime, а затем проверить условие с помощью:

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")

что это:)

0 голосов
/ 11 ноября 2018

Вам нужно преобразовать строку даты в datetime. Вы можете сделать это несколькими способами.

Используйте встроенный datetime.strptime

Например, сначала сравните с datetime перед сравнением. Для этого необходимо заранее указать формат:

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)

Использовать стороннюю библиотеку

Одним из популярных инструментов является dateutil.parser, который способен анализировать наиболее распространенные форматы даты и времени без заранее определенного формата:

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
0 голосов
/ 11 ноября 2018

Вы должны использовать strptime, чтобы преобразовать строку в дату.

Оператор сравнения применяется только между датой и временем.

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

тогда вы можете сделать

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