如何使用 Chrono 解析 ISO 8601 持续时间字符串?
How do I parse ISO 8601 duration strings using Chrono?
虽然 chrono
支持以 ISO 8601 兼容格式解析日期、时间和时区,但我无法在板条箱中找到任何方法来解析持续时间字符串,例如 PT2M
代表 2分钟。
Chrono 没有任何功能来完成这项工作。
相反,使用 parse_duration crate 来解决问题:
extern crate parse_duration;
use parse_duration::parse;
fn main() {
print!("{:?}", parse("2 minutes"));
}
Ok(120s)
此外,没有任何函数可以将 ISO 8601 快捷方式转换为 chrono 或 parse_duration crate 的表示形式。
如果您使用 parse_duration crate,您需要编写一个解析器将 PT2M
等快捷方式转换为 2 minutes
等人类可读形式。
如果你想直接使用 chrono crate,你需要做很多计算才能将持续时间转化为数字表示。我会在 parse_duration.
中查看 parse
的来源
一种解决方法是计算两个 NaiveDate
中的持续时间:
extern crate chrono;
use chrono::{Duration, NaiveDate};
fn main() {
let d = NaiveDate::from_ymd(2021, 8, 2);
let tm1 = d.and_hms(0, 0, 0);
let tm2 = d.and_hms(0, 2, 0);
let delta: Duration = tm2.signed_duration_since(tm1);
print!("{:?}", delta);
}
Duration { secs: 120, nanos: 0 }
Chrono 没有任何功能来完成这项工作。
您可以改用 iso8601-duration 箱子。
虽然 chrono
支持以 ISO 8601 兼容格式解析日期、时间和时区,但我无法在板条箱中找到任何方法来解析持续时间字符串,例如 PT2M
代表 2分钟。
Chrono 没有任何功能来完成这项工作。
相反,使用 parse_duration crate 来解决问题:
extern crate parse_duration;
use parse_duration::parse;
fn main() {
print!("{:?}", parse("2 minutes"));
}
Ok(120s)
此外,没有任何函数可以将 ISO 8601 快捷方式转换为 chrono 或 parse_duration crate 的表示形式。
如果您使用 parse_duration crate,您需要编写一个解析器将 PT2M
等快捷方式转换为 2 minutes
等人类可读形式。
如果你想直接使用 chrono crate,你需要做很多计算才能将持续时间转化为数字表示。我会在 parse_duration.
中查看parse
的来源
一种解决方法是计算两个 NaiveDate
中的持续时间:
extern crate chrono;
use chrono::{Duration, NaiveDate};
fn main() {
let d = NaiveDate::from_ymd(2021, 8, 2);
let tm1 = d.and_hms(0, 0, 0);
let tm2 = d.and_hms(0, 2, 0);
let delta: Duration = tm2.signed_duration_since(tm1);
print!("{:?}", delta);
}
Duration { secs: 120, nanos: 0 }
Chrono 没有任何功能来完成这项工作。
您可以改用 iso8601-duration 箱子。