解决方法
我喜欢很多的图书馆,越来越多的人使用,是
python-dateutil,但不幸的是,它也不是其他传统的大日期时间解析器,mxDateTime from Egenix可以解析“明天”这个词,尽管图书馆有很强的“模糊“解析器.
我看到的唯一可以做到这一点的库是magicdate.例子:
>>> import magicdate >>> magicdate.magicdate('today') datetime.date(2009,2,15) >>> magicdate.magicdate('tomorrow') datetime.date(2009,16) >>> magicdate.magicdate('yesterday') datetime.date(2009,14)
不幸的是,这只能返回datetime.date对象,所以不会包含时间部分,不能处理你的“今天下午3:20”的例子.
所以,你需要mxDateTime.例子:
>>> import mx.DateTime >>> mx.DateTime.Parser.DateTimeFromString("Today 3:20 PM") <mx.DateTime.DateTime object for '2009-02-15 15:20:00.00' at 28faa28> >>> mx.DateTime.Parser.DateTimeFromString("Tomorrow 5:50 PM") <mx.DateTime.DateTime object for '2009-02-15 17:50:00.00' at 2a86088>
编辑:mxDateTime.Parser仅解析这些示例中的时间,忽略“今天”和“明天”.所以对于这种特殊情况,您需要使用magicdate的组合来获取日期和mxDateTime来获取时间.我的建议是使用python-dateutils或mxDateTime,只接受他们可以解析的字符串格式.
编辑2:正如注释中所示,python-dateutil现在可以处理模糊的解析.我还发现了开发用于Chandler的parsedatetime模块,它与此问题中的查询一起使用:
>>> import parsedatetime.parsedatetime as pdt >>> import parsedatetime.parsedatetime_consts as pdc >>> c=pdc.Constants() >>> p=pdt.Calendar(c) >>> p.parse('Today 3:20 PM') ((2010,3,12,15,20,4,71,-1),3) >>> p.parse('Yesterday 11:06 AM') ((2010,11,6,70,3)
并且在这里参考是当前时间:
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2010,23,35,951652)