什么';It’从“开始”到“结束”的最佳方式是什么;“今天”;或;“昨天”;用Python写一段时间?

什么';It’从“开始”到“结束”的最佳方式是什么;“今天”;或;“昨天”;用Python写一段时间?,python,datetime,parsing,Python,Datetime,Parsing,Python具有相当好的日期解析功能,但它是通过创建新的日期并执行减法来识别日期时间(如“今天下午3:20”或“昨天上午11:06”)的唯一方法?我还没有完全掌握Python的最新速度,但您的问题让我感兴趣,所以我仔细研究了一下 到目前为止,使用日期减法是我发现的最常见的解决方案 由于您的问题询问这是否是唯一的方法,因此我查看了strftime格式代码,看看您是否可以定义自己的格式。不幸的是没有。来自Python的: 。。。由于Python调用平台C库的strftime()函数,所以支持的全套格

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

我还没有完全掌握Python的最新速度,但您的问题让我感兴趣,所以我仔细研究了一下

到目前为止,使用日期减法是我发现的最常见的解决方案

由于您的问题询问这是否是唯一的方法,因此我查看了strftime格式代码,看看您是否可以定义自己的格式。不幸的是没有。来自Python的:

。。。由于Python调用平台C库的strftime()函数,所以支持的全套格式代码在不同平台上有所不同,而且平台的变化也很常见

以下是C标准(1989版)要求的所有格式代码的列表


无论如何,这并不是一个确定的答案,但也许它会节省其他人的时间去找错方向。

我非常喜欢的一个库,我看到越来越多的人使用它,但不幸的是,它和其他传统的大型datetime解析器都不能解析“明天”,尽管这两个库都有很强的“模糊性”解析器

我见过的唯一能做到这一点的图书馆是。示例:

>>> 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)
>>> 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>
不幸的是,这只返回datetime.date对象,因此不包括时间部分,也无法处理“今天下午3:20”的示例

所以,你需要更多的时间。示例:

>>> 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)
>>> 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>
以下是当前时间供参考:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 3, 12, 15, 23, 35, 951652)

我的建议是向myDateTime提交一个bug;添加“今天/昨天/明天”应该没那么难吧?@Van:Maybe
dateutil
自从你发布这篇文章以来已经有所改进了。使用dateutil版本1.4.1,
dateutil.parser.parse('明天下午5:50,fuzzy=True)
返回
datetime.datetime(2010,3,12,17,50)
@~unutbu:谢谢,很高兴知道。我还发现了parsedatetime模块,该模块在一个非常小的项目中运行良好。@unutbu:使用dateutil 1.5,
“明天”
似乎不起作用。看看你的例子,它也不适用于1.4.1。。。
fuzzy
参数只允许跳过不可分析的部分。@thm:Hm.确实是这样。要添加到列表中的另一个解决方案是Paul McGuire的
pyparsing
with。