从“今天”还是“昨天”到Python的时间,最好的方法是什么?

前端之家收集整理的这篇文章主要介绍了从“今天”还是“昨天”到Python的时间,最好的方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Python具有相当不错的日期解析功能,但是通过今天创建一个新的日期并进行减法,是识别日期时间的唯一方法,例如“今天3:20 PM”或“昨天上午11:06”

解决方法

我喜欢很多的图书馆,越来越多的人使用,是 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)

猜你在找的Python相关文章