Parse ISO8601 duration format.
https://en.wikipedia.org/wiki/ISO_8601#Durations
toml
iso8601-duration = "0.2.0"
```rust use iso8601_duration::Duration;
asserteq!(
"P3Y6M4DT12H30M5S".parse(),
Ok(Duration::new(3., 6., 4., 12., 30., 5.))
);
asserteq!("P23DT23H".parse::
assert!("PT".parse::
year
and month
Duration
can be converted to either std::time::Duration
or
chrono::Duration
by calling to_std
or to_chrono
.
Both to_std
and to_chrono
will return None
if the duration
includes year
and month
. Because ISO8601 duration format allows
the usage of year
and month
, and these durations are non-standard.
Since months can have 28, 29 30, 31 days, and years can have either
365 or 366 days.
To perform a lossless conversion, a starting date must be specified:
``rust
// requires
chrono` feature
use iso8601_duration::Duration; use chrono::DateTime;
let onemonth: Duration = "P1M".parse().unwrap(); let date = DateTime::parsefromrfc3339("2000-02-01T00:00:00Z").unwrap(); asserteq!( onemonth.tochronoatdatetime(date).num_days(), 29 // 2000 is a leap year ); ```
License: MIT