datetime - разница в сутки
Необходимо определить, имеется ли между текущей датой и пришедшей датой разница в сутки.
def gt(dt_str):
print(dt_str)
dt, _, us = dt_str.partition(".")
dt = datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S")
us = int(us.rstrip("Z"), 10)
return dt + datetime.timedelta(microseconds=us)
def isToday(text):
current = gt(text)
curr = datetime.datetime.now()
period = curr - current
# print(current)
# print(curr)
if(period.total_seconds() >= 86400):
return False
return True
Данный код хорошо работает для дат формата
2020-04-26T13:30:04.000Z
Но иногда прилетает
2020-04-26T02:51:47Z
Как можно конвертировать и такие даты. Использую Python 3.6
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь модулем dateutil:
In [80]: from dateutil.parser import parse as dt_parse # pip install dateutil
In [81]: dt_parse("2020-04-26T13:30:04.000Z")
Out[81]: datetime.datetime(2020, 4, 26, 13, 30, 4, tzinfo=tzutc())
In [82]: dt_parse("2020-04-26T02:51:47Z")
Out[82]: datetime.datetime(2020, 4, 26, 2, 51, 47, tzinfo=tzutc())
In [83]: dt_parse("2020-04-26T03:03:03.123456Z")
Out[83]: datetime.datetime(2020, 4, 26, 3, 3, 3, 123456, tzinfo=tzutc())
In [84]: dt_parse("2020-04-26T03:03:03.123456GMT+2")
Out[84]: datetime.datetime(2020, 4, 26, 3, 3, 3, 123456, tzinfo=tzoffset(None, -7200))
UPDATE: для того чтобы работала арифметика - обе даты должны быть либо offset-aware либо offset-naive:
offset-aware:
In [99]: from datetime import timezone, datetime as DT
In [100]: DT.utcnow().replace(tzinfo=timezone.utc) - dt_parse("2020-04-26T03:03:03.123456Z").replace(tzinfo=timezone.utc)
Out[100]: datetime.timedelta(seconds=46843, microseconds=764721)
offset-naive:
In [101]: DT.now() - dt_parse("2020-04-26T03:03:03.123456Z").replace(tzinfo=None)
Out[101]: datetime.timedelta(seconds=54144, microseconds=524074)