While chrono
supports parsing of date, time and time zone in ISO 8601 compliant format, I am unable to find any method in the crate to parse duration strings such as PT2M
which represents 2 minutes.
Chrono doesn't have any function to do this job.
Instead, use the parse_duration crate to solve the problem:
extern crate parse_duration;
use parse_duration::parse;
fn main() {
print!("{:?}", parse("2 minutes"));
}
Ok(120s)
Furthermore, there isn't any function that converts ISO 8601 shortcuts into a representation for the chrono or parse_duration crate.
You need to write a parser that transforms the shortcuts like PT2M
into a human readable form like 2 minutes
, if you work with the parse_duration crate.
If you want to use the chrono crate directly, you have a lot of calculation to do to put the duration into a numeric representation. I would take a look into the sources of parse
in parse_duration.
One workaround could be to calculate the duration out of two NaiveDate
s:
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 }