#date-time #parser #english #fork #linux #compatible #chrono-english

无 std 临时

解析简单的英文日期,受 Linux date 命令启发,并从 chrono-english 分支而来

4 个版本

0.1.2 2024年5月30日
0.1.1 2023年10月15日
0.1.0 2022年9月18日
0.0.0 2022年9月18日

29日期和时间

Download history 3919/week @ 2024-05-03 3503/week @ 2024-05-10 3513/week @ 2024-05-17 2617/week @ 2024-05-24 4361/week @ 2024-05-31 4492/week @ 2024-06-07 4166/week @ 2024-06-14 2751/week @ 2024-06-21 2509/week @ 2024-06-28 5028/week @ 2024-07-05 5090/week @ 2024-07-12 4781/week @ 2024-07-19 3937/week @ 2024-07-26 3001/week @ 2024-08-02 3666/week @ 2024-08-09 2371/week @ 2024-08-16

13,796 每月下载量
用于 7 个包 (5 个直接使用)

MIT 许可证

58KB
1K SLoC

临时

临时最初是一个分支,但最终对 chrono-english 进行了全面的重构。

API 接口相同,尽管有一些关键区别

改进

为什么使用临时而不是 chrono-english?

  1. chrono-english 不再积极维护:[链接](https://github.com/stevedonovan/chrono-english/issues/22)
  2. 临时简化了大量代码,移除了许多潜在的恐慌,并添加了一些优化。
  3. 支持 no_std,以及 time

特性

  • std:此包与 no_std 兼容。禁用默认特性以禁用 std 库特性(仅错误报告)
  • time:此包与 time 包 兼容。
  • chrono:此包与 chrono 包 兼容。

支持格式

interim 支持 绝对 日期:类似于 ISO 的日期 "2018-04-01" 和月份名称形式 "1 April 2018" 和 "April 1, 2018"。(没有歧义,这两种形式都可以)

还支持非正式的 "01/04/18" 或美国形式 "04/01/18"。有一个 Dialect 枚举来指定您想使用的日期英语类型。在此形式中接受短年和长年;短日期在 1940 年和 2040 年之间转换。

还有 相对 日期,如 'April 1' 和 '9/11'(使用 Dialect::Us)。假定当前年份,但可以通过 'next' 和 'last' 进行修改。例如,现在是 2018 年 3 月 13 日:'April 1' 和 'next April 1' 在 2018 年;'last April 1' 在 2017 年。

另一种相对形式只是一个月份名称,如 'apr' 或 'April'(不区分大小写,只有前三个字母是有效的),其中假设日期是 1 日。

工作日的工作方式相同:“friday”表示相对于今天的这个星期五。“上星期五”是不含糊的,但“下星期五”有不同的含义;在美国,它和“friday”相同,但在其他情况下,它表示下周的星期五(加7天)

日期和时间也可以通过多个时间单位来指定。所以“2天”,“3小时”。同样,前三个字母,但“d”,“m”和“y”是可以理解的(所以“3h”)。我们区分了间隔(秒、分钟、小时),间隔(天、周)和间隔(月、年)。

秒间隔后面不需要时间,但天和月间隔可以。如果没有时间,则天间隔的时间与基本时间相同(默认为“现在”)

月间隔总是给出相同的日期,如果可能的话。但是,给“30 Jan”加一个月将给出“28 Feb”或“29 Feb”,这取决于是否是闰年。

最后,日期后面可以跟时间。可以是“正式”的,如18:03,可选秒(如18:03:40),也可以是“非正式”的,如6.03pm。因此可以得到“下星期五晚上8点”等等。

API

有两个入口点:parse_date_stringparse_duration。第一个接受日期字符串,一个DateTime,它是相对日期和时间操作的基础,以及一个方言(目前是Dialect::UkDialect::Us)。基本时间还指定了所需的时区。

use interim::{parse_date_string, Dialect};
use chrono::Local;

let date_time = parse_date_string("next friday 8pm", Local::now(), Dialect::Uk)?;
println!("{}", date_time.format("%c"));

examples文件夹中有一个小型的命令行程序parse-date,可以用来玩这些表达式。

另一个函数parse_duration允许您访问字符串的相对部分,如“两天前”或“12小时”。如果成功,则返回一个Interval,这是一个秒数、天数或月数。

use interim::{parse_duration, Interval};

assert_eq!(parse_duration("15m ago").unwrap(), Interval::Seconds(-15 * 60));

您可以通过使用CLI示例来测试库。

cargo run --example cli --features time 'next day'

依赖关系

~2MB