2 个不稳定版本
0.2.0 | 2023 年 3 月 19 日 |
---|---|
0.1.0 | 2019 年 10 月 1 日 |
在 日期和时间 中排名 219
每月下载量 14,500
在 6 个 包中使用(直接使用 2 个)
19KB
365 行
iso8601-duration
解析 ISO8601 持续时间格式。
https://en.wikipedia.org/wiki/ISO_8601#Durations
安装
iso8601-duration = "0.2.0"
用法
use iso8601_duration::Duration;
assert_eq!(
"P3Y6M4DT12H30M5S".parse(),
Ok(Duration::new(3., 6., 4., 12., 30., 5.))
);
assert_eq!("P23DT23H".parse::<Duration>().unwrap().num_hours(), Some(575.));
assert_eq!("P0.5Y".parse::<Duration>().unwrap().num_years(), Some(0.5));
assert_eq!("P0.5Y0.5M".parse::<Duration>().unwrap().num_months(), Some(6.5));
assert_eq!("P12W".parse::<Duration>().unwrap().num_days(), Some(84.));
assert!("PT".parse::<Duration>().is_err());
assert!("P12WT12H30M5S".parse::<Duration>().is_err());
assert!("P0.5S0.5M".parse::<Duration>().is_err());
assert!("P0.5A".parse::<Duration>().is_err());
year
和 month
Duration
可以通过调用 to_std
或 to_chrono
转换为 std::time::Duration
或 chrono::Duration
。
如果持续时间包含 year
和 month
,则 to_std
和 to_chrono
将返回 None
。因为 ISO8601 持续时间格式允许使用 year
和 month
,而这些持续时间是非标准的。由于月份可以有 28、29、30 或 31 天,而年份可以是 365 或 366 天。
为了进行无损转换,必须指定起始日期
// requires `chrono` feature
use iso8601_duration::Duration;
use chrono::DateTime;
let one_month: Duration = "P1M".parse().unwrap();
let date = DateTime::parse_from_rfc3339("2000-02-01T00:00:00Z").unwrap();
assert_eq!(
one_month.to_chrono_at_datetime(date).num_days(),
29 // 2000 is a leap year
);
许可证:MIT
依赖项
~0.9–1.5MB
~28K SLoC