有没有办法将时区的缩写解析为Rust的时区偏移



是否有一种解析时区缩写(例如 ESTMDT(到时区偏移(例如-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固定偏移。这些不是很好的标准化,实际上相同的缩写可能意味着不同国家的不同事物。对于这些,您可能会为要支持的一组缩写制作一个简单的查找表。

相关内容

  • 没有找到相关文章

最新更新