Как сравнить даты ISO-8601 в питоне - PullRequest
0 голосов
/ 12 июня 2018

У меня есть дата в формате ISO-8601

date="2018-03-13T17:22:20.065Z"

Я хочу найти текущее время UTC в формате iso9621.Я нашел фрагмент кода, например datetime.datetime.utcnow().isoformat()

, который дает нам следующий результат

2018-06-12T08:19:28.954375

Я хочу выяснить, является ли предоставленная дата старше 30 дней или нет.

Я пытался решить ее, как показано в этом вопросе

import datetime
import dateutil.parser

insertion_date = dateutil.parser.parse('2018-03-13T17:22:20.065Z')
diffretiation=datetime.datetime.utcnow().isoformat() - insertion_date


print diffretiation 
print insertion_date

if diffretiation.days>30:
    print "The insertion date is older than 30 days"

else:
    print "The insertion date is not older than 30 days"

Я нашел следующую ошибку здесь

Traceback (most recent call last):
  File "test2.py", line 5, in <module>
    right_now_30_days_ago=datetime.datetime.utcnow().isoformat() - insertion_date
TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'

Здесь будет любая помощь

1 Ответ

0 голосов
/ 12 июня 2018

Ваш datetime.datetime.utcnow() не знает часового пояса, и для его информирования используйте pytz:

import datetime
import dateutil.parser
import pytz

insertion_date = dateutil.parser.parse('2018-03-13T17:22:20.065Z')
diffretiation = pytz.utc.localize(datetime.datetime.utcnow()) - insertion_date


print diffretiation 
print insertion_date

if diffretiation.days>30:
    print "The insertion date is older than 30 days"

else:
    print "The insertion date is not older than 30 days"
#The insertion date is older than 30 days

PS datetime.datetime.utcnow().isoformat() возвращает строку, и это была ошибка, с которой вы столкнулись.

...