Извлечение даты и времени из строки. - PullRequest
3 голосов
/ 01 декабря 2010

У меня есть база данных, полная данных, включая строку даты и времени, например, Tue, 21 Sep 2010 14:16:17 +0000

Что я хотел бы сделать, это извлечь различные документы (записи) из базы данных на основевремя, содержащееся в строке даты, Tue, 21 Sep 2010 14:16:17 +0000.

Из приведенной выше строки даты, как бы я использовал Python и регулярные выражения для извлечения документов, которые имеют время 15:00:00?Кстати, я использую MongoDB вместе с Python.

Ответы [ 4 ]

2 голосов
/ 01 декабря 2010

Я не знаю MongoDB, но разве это не должно работать?

SELECT * FROM Database WHERE Date LIKE '%15:00:00%'

Если у вас есть строка даты, то единственное место, где она содержит двоеточия, будет частью времени, поэтому это должно быть достаточно без регулярного выражения. Конечно, было бы лучше, если бы у вас в поле даты была фактическая отметка времени вместо строки.

1 голос
/ 20 сентября 2018

Для простоты используйте:

import datetime, dateutil.parser
dateutil.parser.parse("Tue, 21 Sep 2010 14:16:17 +0000").strftime('%X')
# '14:16:17'
1 голос
/ 01 декабря 2010

Вы можете использовать $, где :

db.collection.find({$where: "var d = new Date(this.dateProperty); return d.getUTCHours() == 15 && d.getUTCMinutes() == 0 && d.getUTCSeconds() == 0"})

Или регулярное выражение:

db.collection.find({dateProperty: /.*15:00.*/})

Второй может быть немного быстрее первого, но оба будут относительно медленными. Для ускорения работы вы должны хранить даты во встроенном формате date. Также, если вам нужно выполнить запрос к компонентам datetime, рассмотрите возможность добавления индексируемого представления даты, такого как {y:2010,m:9,d:21,h:14,i:16,s:17} (свойства зависят от потребностей вашего запроса, если вам нужен запрос только по часу, у вас будет {h:14}). Тогда вы можете иметь индекс для каждого компонента.

1 голос
/ 01 декабря 2010

Я согласен с другим постером. Хотя это не решает вашу непосредственную проблему, если у вас есть какой-либо контроль над базой данных, вам следует серьезно подумать о создании времени / столбца с типом данных DATE или TIMESTAMP. Это сделало бы вашу систему намного более надежной и полностью исключило бы проблему с попыткой парсинга дат из строки (изначально хрупкая техника).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...