首页 > 解决方案 > 人类可读的增量时间文本到 Python `timedelta`

问题描述

我已经看到了很多关于如何解析包含日期/时间的人类可读文本的示例,以datetime构建自“纪元”以来的几秒钟。

一些 Pyhton 库(例如parsedatetimedateparser声称能够解析相对日期/时间(例如“1 分 47 秒前”),但最终结果始终锚定到特定日期/时间。

使用两个提到的库的示例:

sdate="1 min 37 seconds ago"
dateparser.parse(sdate)
datetime.datetime(2019, 8, 19, 17, 20, 29, 325230)
pdtCal.parse(sdate)
(time.struct_time(tm_year=2019, tm_mon=8, tm_mday=19, tm_hour=17, tm_min=22, tm_sec=49, tm_wday=0, tm_yday=231, tm_isdst=-1), 2)

不过,我需要的是像一个timedelta对象一样简单的东西,但从我能学到的东西来看,我能做的最好的事情就是通过从当前时间中timedelta减去解析后的时间来计算 。datetime

显然,这不一样,因为我将添加一个采样错误(datetime.datetime.now()在解析器运行的不同时间运行)。

所以我问,在 Python 中是否有一种简单而可靠的方法可以将这个增量时间文本直接解析为一个timedelta对象或一个标量值(例如秒数)?

谢谢!

标签: pythonpython-2.7datetimeparsing

解决方案


有一种方法可以在dateparser使用设置时指定“锚定日期” :

In [1]: from dateparser import parse
In [2]: from datetime import datetime

In [3]: anchor_date = datetime(2020, 1, 1)
In [4]: parsed_date = parse('1 min 37 seconds ago', settings={'RELATIVE_BASE': anchor_date})
In [5]: parsed_date - anchor_date
Out[5]: datetime.timedelta(days=-1, seconds=86303)

使用与相对基数相同的日期并在增量计算中确保精确的结果。


推荐阅读