Fully Compliant ISO 8601 Parser

The go-to library for all your date and time parsing needs.

Any unimplemented notation the standard supports is considered a bug.

Chrono support is included.

Roadmap

Version 1.0.0 will be reached when the entire standard is implemented.

Chrono support is very limited at the moment. Contributions would very welcome, should be a low-hanging fruit.

Examples

Basics:

```rust use std::str::FromStr; use iso_8601::*;

asserteq!( Date::fromstr("2018-08-02").unwrap(), Date::YMD(YmdDate { year: 2018, month: 8, day: 2, }) );

asserteq!( LocalTime::fromstr("13:42").unwrap(), LocalTime { naive: HmTime { hour: 13, minute: 42, }, fraction: 0., } );

// Parse any date, time, or datetime expression without knowing what it is:

asserteq!( PartialDateTime::fromstr("12:30").unwrap(), PartialDateTime::Time(ApproxAnyTime::HM(AnyTime::Local(LocalTime { naive: HmTime { hour: 12, minute: 30, }, fraction: 0., }))) );

asserteq!( PartialDateTime::fromstr("2018-08").unwrap(), PartialDateTime::Date(ApproxDate::YM(YmDate { year: 2018, month: 8, })) );

asserteq!( PartialDateTime::fromstr("20180802T1230").unwrap(), PartialDateTime::DateTime(DateTime { date: ApproxDate::YMD(YmdDate { year: 2018, month: 8, day: 2, }), time: ApproxAnyTime::HM(AnyTime::Local(LocalTime { naive: HmTime { hour: 12, minute: 30, }, fraction: 0., })) }) ); ```

Chrono support:

```rust extern crate chrono;

use std::str::FromStr; use iso_8601::*;

fn main() { asserteq!( chrono::DateTime::::from( DateTime::::fromstr("2018-08-02T13:42:02Z").unwrap() ), chrono::DateTime::::fromutc( chrono::NaiveDateTime::new( chrono::NaiveDate::fromymd(2018, 8, 2), chrono::NaiveTime::from_hms(13, 42, 2) ), chrono::Utc ) ); } ```