rust - 有没有办法将时区缩写解析为 Rust 中的时区偏移量?

标签 rust timezone timezone-offset chrono-tz

在 Rust 中,是否有一种方法可以将时区缩写(如 ESTMDT)解析为时区偏移量(例如 -5 小时或 -7 小时)? chrono_tz crate几乎似乎是这样做的,但不完全是。

最佳答案

您可以使用 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);

}

结果是 Duration您可以从中提取小时、分钟等。我上面的示例给出了输出:

offset = UTC+10:00

请注意,chrono-tz(派生自 IANA TZ database)支持的时区不描述固定偏移量。相反,数据库包含一组描述每个时区的夏令时转换时间的规则。因此,您只能通过提供您想知道偏移量的时间来准确获取偏移量(在我的示例中,它是 2019-05-09 12:00:00)。

还有一个set of abbreviations与 UTC 的固定偏移量。这些都没有很好的标准化,事实上同一个缩写在不同的国家可能意味着不同的东西。对于这些,您最好为要支持的一组缩写制作一个简单的查找表。

关于rust - 有没有办法将时区缩写解析为 Rust 中的时区偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050292/

相关文章:

rust - 在 Rust 中使用泛型、特征别名和构造函数

rust - 为什么我的结构生命周期不够长?

datetime - ColdFusion 时区支持?

ruby-on-rails - 带 rails 的时区 3

java - 使用java 8将时间转换为UTC

multithreading - 如何在不使用互斥锁的情况下从任意索引处的多个线程写入可变切片?

macros - 为什么我无法在 Rust 宏中使用 `block` 匹配器来匹配结构体?

java - Gson反序列化Java.util.Date与时区

java - OffsetDateTime 因使用 LONG 或 FULL 的 FormatStyle 的本地化格式化程序而失败