5个版本
0.2.0 | 2024年6月5日 |
---|---|
0.1.3 | 2024年2月18日 |
0.1.2 | 2024年2月15日 |
0.1.1 | 2024年2月13日 |
0.1.0 | 2024年1月22日 |
#143 在 日期和时间
34KB
922 行
Langtime - 在Rust中解析日期
这个库是一个个人项目,允许Rust程序员解析用英文书写的日期,包括绝对和相对日期。以下是您可以当前解析的一些日期示例
2024-01-01在20:15
28/02/2024在10一个.分钟.
25之前
为什么在chrono-english已经存在的情况下还要创建这个仓库呢?原因有两个。首先,我不知道它的存在。其次,有一些格式或其组合无法用chrono_english解析。
此库使用nom,这使得添加新格式到可解析输入变得极其简单。
如何使用
此库最基本的使用方法如下
fn main() {
match langtime::parse("12/05/2024 at 8pm") {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
};
}
默认情况下,解析函数将丢弃任何超出日期时间字符串的输入。例如,此代码也会正确匹配类似“12/05/2024是日期”的字符串,即使“是日期”不是作为时间或日期格式识别。
您可以通过配置结构体传递一些选项。第一个是英语方言(美国或英国)。这目前仅用于区分该语言的日期格式是“dd/mm/yyyy”还是“mm/dd/yyyy”。然后,您还可以强制库检查整个字符串是否可以解析为日期,因此文本“12/05/2024是日期”将不再被视为正确,并导致错误。
以下是您如何做到这一点
use langtime::{parse_with_config, ParseConfig, Dialect};
fn main() {
let config = ParseConfig {
dialect: Dialect::US,
full_string_match: true
};
match parse_with_config("05/23/2024 at 9pm", &config) {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
}
}
下一个目标
- 扩展允许的标记以分离句子的各个部分
- 正确计算月份和年份
- 实现单元测试
- 添加缺少的时间格式
- 在解析之前清理文本
- 添加英语方言(英国/美国)的配置
- 添加强制匹配整个字符串的配置
可解析数据
日期
- 2024-01-20 (ISO)
- 20/01/2024
- 昨天 / 明天
- 01/2024 (月初)
- 2024年1月 (与上述相同)
时间
- 17:00
- 17:00:30
- 下午5点 / 5pm
- 8点 / 9点半 / 9点15分
相对时间和日期
- 5小时后
- 8分钟前
- 2小时8分钟10秒前
- 上周五
- 下周二
- 周六 / 本周六
- 2天前
- 3个月后
完整的日期和时间
- 2024-01-01T20:30:10
- 昨天17:00
- 明天晚上8点
- 2天前早上5点
- 上周五9点
依赖项
~2MB
~37K SLoC