从字符串中提取日期和时间信息。

时间:2010-12-01 14:10:31

标签: python regex mongodb datetime database

我有一个包含数据的数据库,包括日期和时间字符串,例如Tue, 21 Sep 2010 14:16:17 +0000

我希望能够根据日期字符串Tue, 21 Sep 2010 14:16:17 +0000中包含的时间从数据库中提取各种文档(记录)。

从上面的日期字符串中,我如何使用python和regex提取时间为15:00:00的文档?顺便说一句,我正在使用MongoDB,与Python结合使用。

4 个答案:

答案 0 :(得分:2)

我不知道MongoDB,但不应该这样做吗?

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

如果你有一个日期字符串,那么它包含冒号的唯一地方就是日期的时间部分,所以没有正则表达式就足够了。当然,如果你的日期字段中有一个实际的时间戳而不是字符串,那会更好。

答案 1 :(得分:1)

我同意另一张海报。虽然这不能解决您的直接问题,但如果您对数据库有任何控制权,则应认真考虑使用DATE或TIMESTAMP数据类型创建时间/列。这将使您的系统更加强大,并且完全避免尝试从字符串解析日期的问题(一种固有的脆弱技术)。

答案 2 :(得分:1)

您可以使用$where

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格式存储日期。此外,如果您需要查询日期时间组件,请考虑添加可索引日期表示,例如{y:2010,m:9,d:21,h:14,i:16,s:17}(属性取决于您的查询需求,如果您只需要按小时查询,则可以{h:14})。然后你可以为每个组件提供索引。

答案 3 :(得分:1)

为使事情变得简单,请使用:

import datetime, dateutil.parser
dateutil.parser.parse("Tue, 21 Sep 2010 14:16:17 +0000").strftime('%X')
# '14:16:17'