当前位置:  开发笔记 > 编程语言 > 正文

什么是从"今天"或"昨天"和Python时间中抽出时间的最佳方式?

如何解决《什么是从"今天"或"昨天"和Python时间中抽出时间的最佳方式?》经验,为你挑选了1个好方法。

Python有很好的日期解析,但是通过今天创建一个新日期并进行减法来识别日期时间的唯一方法,例如"今天下午3:20"或"昨天上午11:06"?



1> Van Gale..:

我喜欢的库很多,而且我看到越来越多的人使用的是python-dateutil,但遗憾的是它既不是它也不是其他传统的大日期时间解析器,来自Egenix的mxDateTime可以解析"明天"这个词,尽管这两个库都是拥有非常强大的"模糊"解析器.

我见过的唯一可以做到这一点的库是magicdate.例子:

>>> 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.Parser.DateTimeFromString("Tomorrow 5:50 PM")

编辑: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, 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)


@Van:也许`dateutil`自你发布以来有所改进.使用dateutil版本1.4.1,`dateutil.parser.parse('明天下午5:50',模糊=真)`返回`datetime.datetime(2010,3,12,17,50)`.
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有