3 个版本 (重大变更)
0.6.0 | 2024年5月21日 |
---|---|
0.5.0 | 2023年9月14日 |
0.4.0 | 2023年6月9日 |
在 日期和时间 中排名第 34
每月下载量 12,605
用于 3 个 Crates(2 个直接使用)
50KB
1K SLoC
parse_datetime
一个用于解析可读的相对时间字符串和可读的日期时间字符串并将它们转换为 DateTime
的 Rust 库。
特性
- 解析各种可读的和标准的时间格式。
- 支持正负持续时间。
- 允许链式使用时间单位(例如,“1小时2分钟”或“2天2小时”)。
- 计算相对于指定日期的持续时间。
- 依赖于 Chrono
用法
将其添加到您的 Cargo.toml
[dependencies]
parse_datetime = "0.5.0"
然后,导入库并使用 parse_datetime_at_date
函数
use chrono::{Duration, Local};
use parse_datetime::parse_datetime_at_date;
let now = Local::now();
let after = parse_datetime_at_date(now, "+3 days");
assert_eq!(
(now + Duration::days(3)).naive_utc(),
after.unwrap().naive_utc()
);
对于日期时间的解析,导入 parse_datetime
函数
use parse_datetime::parse_datetime;
use chrono::{Local, TimeZone};
let dt = parse_datetime("2021-02-14 06:37:47");
assert_eq!(dt.unwrap(), Local.with_ymd_and_hms(2021, 2, 14, 6, 37, 47).unwrap());
支持的格式
parse_datetime
和 parse_datetime_at_date
函数支持绝对日期时间和以下相对时间
num
unit
(例如,“-1小时”,“+3天”)unit
(例如,“小时”,“天”)- “现在”或“今天”
- “昨天”
- “明天”
- 对于过去使用“ago”
- 与
unit
一起使用“next”或“last”(例如,“下周”,“去年”) - 使用“and”或“,”组合单位(例如,“2年1个月”,“1天2小时”或“2周1秒”)
- Unix 时间戳(例如,“@0”,”@1344000”)
num
可以是正整数或负整数。unit
可以是以下之一:“fortnight”,“week”,“day”,“hour”,“minute”,“min”,“second”,“sec”及其复数形式。
返回值
parse_datetime 和 parse_datetime_at_date
parse_datetime
和 parse_datetime_at_date
函数返回
Ok(DateTime<FixedOffset>)
- 如果输入字符串可以解析为日期时间Err(ParseDateTimeError::InvalidInput)
- 如果输入字符串无法解析
模糊测试工具
运行模糊测试工具
$ cd fuzz
$ cargo install cargo-fuzz
$ cargo +nightly fuzz run fuzz_parse_datetime
许可证
本项目的许可协议为 MIT 许可协议。
注意
在某个阶段,这个包被称为 humantime_to_duration。它已经被重命名以涵盖更多情况。
依赖项
~4–10MB
~98K SLoC