是否有一种解析时区缩写(例如 EST
或 MDT
(到时区偏移(例如-5小时或-7小时(的方法?Chrono_tz板条箱似乎几乎是这样做的,但不完全。
您可以使用Chrono_tz,通过从UTC的同一时间减去所请求的时区的时间:
use chrono::TimeZone;
use chrono_tz::Tz;
use chrono_tz::UTC;
fn main() {
let tz: Tz = "Australia/Melbourne".parse().unwrap();
let dt = tz.ymd(2019, 05, 09).and_hms(12, 0, 0);
let utc = UTC.ymd(2019, 05, 09).and_hms(12, 0, 0);
let offset = utc - dt;
println!("offset = UTC{:+02}:{:02}", offset.num_hours(), offset.num_minutes() % 60);
}
结果是持续时间,您可以从中提取数小时,分钟等。我上面的样本给出了输出:
offset = UTC+10:00
请注意,chrono-tz
支持的时区(源自IANA TZ数据库(不描述固定的偏移。相反,数据库包含一组规则,这些规则描述了每个时区的日光节省的转换时间。因此,您只能通过提供您想知道偏移的时间来准确地获得偏移(在我的示例中,是2019-05-09 12:00:00(。
还有一组缩写,用于固定的UTC固定偏移。这些不是很好的标准化,实际上相同的缩写可能意味着不同国家的不同事物。对于这些,您可能会为要支持的一组缩写制作一个简单的查找表。