Пытаясь ответить на другой вопрос Я наткнулся на следующую проблему:
dateparser.search.search_dates()
возвращает список кортежей, каждый из которых состоит из распознанного текстового сегмента в качестве переноса информации о дате и / или времени и соответствующей datetime
(плюс необязательный языковой код, если требуется).
Если сегмент имел тип даты, только поля даты datetime
набор. Остальные берутся из текущего времени или из базовой даты и времени, которые могут быть предоставлены через параметр settings
. И наоборот, если сегмент был временного типа. Только если в сегменте содержится информация о дате и времени, все поля даты и времени datetime
установлены.
☞ Я не нашел способа узнать, какие поля из datetime
были установлены и что нет. 101
Я мог бы указать конкретную базу datetime
и проверить, какая группа полей изменилась, но относительные даты будут смещены относительно этой базы, не говоря уже о других проблемах.
Что я отсутствует? Как отличить даты, время и дату от времени?
Пример кода:
for s in ("Soccer with @homies at Payne Whitney tomorrow at 2 pm to 4 pm!",
"Soccer with @homies at Payne Whitney tomorrow starting at 2 pm to 4 pm!"):
print()
print(s)
for part in search_dates(s):
print(part)
Вывод:
Soccer with @homies at Payne Whitney tomorrow at 2 pm to 4 pm!
('tomorrow at 2 pm', datetime.datetime(2020, 1, 15, 14, 0))
('4 pm', datetime.datetime(2020, 1, 14, 16, 0))
Soccer with @homies at Payne Whitney tomorrow starting at 2 pm to 4 pm!
('tomorrow', datetime.datetime(2020, 1, 15, 13, 31, 40, 681832))
('at 2 pm', datetime.datetime(2020, 1, 14, 14, 0))
('4 pm', datetime.datetime(2020, 1, 14, 16, 0))