5 releases (3 breaking)
Uses old Rust 2015
0.4.1 | Jul 5, 2021 |
---|---|
0.4.0 | Jul 5, 2021 |
0.3.0 | Oct 6, 2018 |
0.2.0 | Sep 20, 2018 |
0.1.0 | Sep 15, 2018 |
#280 in Date and time
23 downloads per month
Used in hip_validator
83KB
2.5K
SLoC
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.
- calendar dates
- week dates
- ordinal dates
- approximate dates
- local time
- global time / time zone offsets
- time decimal fractions
- approximate time
- datetime
- durations
- intervals
- recurring intervals
Chrono support is very limited at the moment. Contributions would very welcome, should be a low-hanging fruit.
Examples
Basics:
use std::str::FromStr;
use iso_8601::*;
assert_eq!(
Date::from_str("2018-08-02").unwrap(),
Date::YMD(YmdDate {
year: 2018,
month: 8,
day: 2,
})
);
assert_eq!(
LocalTime::from_str("13:42").unwrap(),
LocalTime {
naive: HmTime {
hour: 13,
minute: 42,
},
fraction: 0.,
}
);
// Parse any date, time, or datetime expression without knowing what it is:
assert_eq!(
PartialDateTime::from_str("12:30").unwrap(),
PartialDateTime::Time(ApproxAnyTime::HM(AnyTime::Local(LocalTime {
naive: HmTime {
hour: 12,
minute: 30,
},
fraction: 0.,
})))
);
assert_eq!(
PartialDateTime::from_str("2018-08").unwrap(),
PartialDateTime::Date(ApproxDate::YM(YmDate {
year: 2018,
month: 8,
}))
);
assert_eq!(
PartialDateTime::from_str("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:
extern crate chrono;
use std::str::FromStr;
use iso_8601::*;
fn main() {
assert_eq!(
chrono::DateTime::<chrono::Utc>::from(
DateTime::<Date, GlobalTime>::from_str("2018-08-02T13:42:02Z").unwrap()
),
chrono::DateTime::<chrono::Utc>::from_utc(
chrono::NaiveDateTime::new(
chrono::NaiveDate::from_ymd(2018, 8, 2),
chrono::NaiveTime::from_hms(13, 42, 2)
),
chrono::Utc
)
);
}
Dependencies
~4.5–6MB
~107K SLoC