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 NaiveDates:
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 doesn't have any function to do this job.
You can use iso8601-duration crate instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With