use icu_calendar::Gregorian;
use icu_time::{
zone::{models, IanaParser, TimeZoneVariant, UtcOffsetCalculator},
TimeZoneInfo, ZonedDateTime,
};
pub fn parse_zoned_gregorian_from_str(
input: &str,
) -> ZonedDateTime<Gregorian, TimeZoneInfo<models::Full>> {
match ZonedDateTime::try_from_str(
input,
Gregorian,
IanaParser::new(),
&UtcOffsetCalculator::new(),
) {
Ok(zdt) => zdt,
Err(icu_time::ParseError::MismatchedTimeZoneFields) => {
match ZonedDateTime::try_loose_from_str(input, Gregorian, IanaParser::new()) {
Ok(zdt) => {
ZonedDateTime {
date: zdt.date,
time: zdt.time,
zone: zdt.zone.with_zone_variant(TimeZoneVariant::Standard),
}
}
Err(e) => panic!("could not parse input: {input}: {e:?}"),
}
}
Err(e) => panic!("could not parse input: {input}: {e:?}"),
}
}