5个版本 (3个重大更改)
使用旧的Rust 2015
0.4.1 | 2021年7月5日 |
---|---|
0.4.0 | 2021年7月5日 |
0.3.0 | 2018年10月6日 |
0.2.0 | 2018年9月20日 |
0.1.0 | 2018年9月15日 |
#280 in 日期和时间
每月23次下载
用于 hip_validator
83KB
2.5K SLoC
完全符合ISO 8601的解析器
处理所有日期和时间解析需求的首选库。
标准支持但未实现的任何表示法都视为错误。
包含Chrono支持。
路线图
当整个标准都得到实现时,将实现1.0.0版本。
- 日历日期
- 周日期
- 序数日期
- 近似日期
- 本地时间
- 全球时间/时区偏移量
- 时间小数
- 近似时间
- 日期时间
- 持续时间
- 区间
- 重复区间
目前Chrono支持非常有限。欢迎贡献,应该是一些低垂的果实。
示例
基础
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支持
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
)
);
}
依赖项
~4.5–6MB
~107K SLoC