Chronyk:把人类说的时间转成 Python 能懂的

Chronyk 在 GitHub 上拿到了 342 Star。

这是一个 Python 3 库,专门解决一个常见问题:人类写的时间字符串怎么解析成程序能处理的数据。用户输入"10 minutes ago"或者"昨天",你要把它变成 timestamp 或者 datetime 对象,Chronyk 就是干这个的。

1、这玩意儿是干嘛的

核心能力就一项:解析人类自然语言描述的时间。

“10 minutes ago”、“10. April 2015”、“2014-02-15”、“yesterday”、“2 days and 30 hours ago”——这些写法各不相同,Chronyk 都能识别并转成标准的时间对象。反过来也能生成相对时间描述,比如"in 2 hours"、“5 hours ago”。

正文顶部截图

2、安装和基本用法

安装很直接:

$ pip install chronyk

基本用法:

>>> from chronyk import Chronyk
>>> t = Chronyk("yesterday")
>>> t.timestamp()
1410235179.0
>>> t.relativestring()
"3 days ago"
>>> t.date()
datetime.date(2014, 9, 9)

构造函数接受 timestamp、自然语言字符串、标准日期格式。构造完成后能拿到各种格式的时间表示:ctime 字符串、timestamp、指定格式的 timestring、datetime 对象,还能生成相对时间描述。

3、输入验证和时区处理

对于需要校验的场景,Chronyk 支持限制未来时间:

timestr = input("Please enter the date you were born: ")
try:
    date = chronyk.Chronyk(timestr, allowfuture=False)
except chronyk.DateRangeError:
    print("Yeah, right.")

时区处理也比较灵活。构造时可以指定 timezone 参数,传入 UTC 偏移秒数,西为正、东为负。实例化后也能直接修改 timezone 属性。几乎所有方法都支持单独传 timezone 参数,也支持相对时间的跨时区转换。

README区域截图

4、在生态中的位置

Python 里处理时间解析的库不少。dateutil 的 parser 能处理常见格式,但对自然语言的覆盖有限。arrow 和 pendulum 侧重 datetime 的封装和运算,不是专门做自然语言解析的。

Chronyk 的定位很清晰:只管人类语言到时间对象的转换,以及相对时间描述的生成。代码量不大,接口简单,一个类几个方法覆盖了主要使用场景。

5、适合哪些人用

  • 需要解析用户自然语言输入时间的命令行工具或 Web 应用
  • 日志分析中处理各种非标准格式的时间戳
  • 需要生成"X 小时前"这类相对时间描述的界面
  • 涉及时区转换的后端服务

342 Star 的体量说明这是个工具型小库,不花哨但解决了一个真实痛点。如果你项目中经常要和人类写的时间打交道,值得装一个试试。

342 Star 的体量说明这是个工具型小库,不花哨但解决了一个真实痛点。如果你项目中经常要和人类写的时间打交道,值得装一个试试。

更多推荐