在 Python 中从“今天”或“昨天”创建时间和时间的最佳方法是什么?

2024-04-03

Python 具有相当好的日期解析能力,但这是通过创建今天的新日期并进行减法来识别日期时间(例如“今天下午 3:20”或“昨天上午 11:06”)的唯一方法吗?


我非常喜欢的一个图书馆,并且我看到越来越多的人使用它,它是python-dateutil http://labix.org/python-dateutil但不幸的是它和其他传统的大日期时间解析器都不是,来自 Egenix 的 mxDateTime http://www.egenix.com/products/python/mxBase/mxDateTime/尽管两个库都具有非常强大的“模糊”解析器,但仍可以解析“明天”一词。

我见过的唯一可以做到这一点的图书馆是魔法日期 http://pypi.python.org/pypi/magicdate/0.1.3。例子:

>>> import magicdate
>>> magicdate.magicdate('today')
datetime.date(2009, 2, 15)
>>> magicdate.magicdate('tomorrow')
datetime.date(2009, 2, 16)
>>> magicdate.magicdate('yesterday')
datetime.date(2009, 2, 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 现在可以处理模糊解析。我也从此发现了解析日期时间 http://code.google.com/p/parsedatetime/开发用于 Chandler 的模块,它适用于这个问题中的查询:

>>> 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, 0, 4, 71, -1), 3)
>>> p.parse('Yesterday 11:06 AM')
((2010, 3, 11, 11, 6, 0, 3, 70, -1), 3)

供参考的是当前时间:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 3, 12, 15, 23, 35, 951652)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中从“今天”或“昨天”创建时间和时间的最佳方法是什么? 的相关文章

随机推荐