diff --git a/Cargo.lock b/Cargo.lock index 57e5e7c6f3..ee23582145 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1630,6 +1630,7 @@ dependencies = [ "chrono", "chrono-tz-build", "phf 0.11.3", + "uncased", ] [[package]] @@ -1640,6 +1641,8 @@ checksum = "8f10f8c9340e31fc120ff885fcdb54a0b48e474bbd77cab557f0c30a3e569402" dependencies = [ "parse-zoneinfo", "phf_codegen 0.11.3", + "phf_shared 0.11.3", + "uncased", ] [[package]] @@ -9273,6 +9276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", + "uncased", ] [[package]] @@ -13972,6 +13976,15 @@ dependencies = [ "serde", ] +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unescaper" version = "0.1.6" diff --git a/Cargo.toml b/Cargo.toml index 77c8457b5b..5934ac792e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -118,7 +118,7 @@ bitflags = "2.4.1" bytemuck = "1.12" bytes = { version = "1.7", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] } -chrono-tz = "0.10.1" +chrono-tz = { version = "0.10.1", features = ["case-insensitive"] } clap = { version = "4.4", features = ["derive"] } config = "0.13.0" const_format = "0.2" diff --git a/src/common/time/src/timezone.rs b/src/common/time/src/timezone.rs index fec659248f..41cc1f7842 100644 --- a/src/common/time/src/timezone.rs +++ b/src/common/time/src/timezone.rs @@ -13,7 +13,6 @@ // limitations under the License. use std::fmt::Display; -use std::str::FromStr; use chrono::{FixedOffset, TimeZone}; use chrono_tz::{OffsetComponents, Tz}; @@ -102,7 +101,7 @@ impl Timezone { .parse::() .context(ParseOffsetStrSnafu { raw: tz_string })?; Self::hours_mins_opt(hrs, mins) - } else if let Ok(tz) = Tz::from_str(tz_string) { + } else if let Ok(tz) = Tz::from_str_insensitive(tz_string) { Ok(Self::Named(tz)) } else { ParseTimezoneNameSnafu { raw: tz_string }.fail() @@ -203,6 +202,10 @@ mod tests { Timezone::Named(Tz::Asia__Shanghai), Timezone::from_tz_string("Asia/Shanghai").unwrap() ); + assert_eq!( + Timezone::Named(Tz::Asia__Shanghai), + Timezone::from_tz_string("Asia/ShangHai").unwrap() + ); assert_eq!( Timezone::Named(Tz::UTC), Timezone::from_tz_string("UTC").unwrap()