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 在 日期和时间 中
13,796 每月下载量
用于 7 个包 (5 个直接使用)
58KB
1K SLoC
临时
临时最初是一个分支,但最终对 chrono-english 进行了全面的重构。
API 接口相同,尽管有一些关键区别
改进
为什么使用临时而不是 chrono-english?
- chrono-english 不再积极维护:[链接](https://github.com/stevedonovan/chrono-english/issues/22)
- 临时简化了大量代码,移除了许多潜在的恐慌,并添加了一些优化。
- 支持
no_std
,以及time
包
特性
支持格式
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_string
和parse_duration
。第一个接受日期字符串,一个DateTime
,它是相对日期和时间操作的基础,以及一个方言(目前是Dialect::Uk
或Dialect::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