如何使用rust chrono获取指定时区中指定日期和时间的DateTime

f45qwnt8  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(447)

我有一个时区名称,比如“America/New_约克”,以及该时区中的年、月、日、小时、分钟和秒。我如何获得该时区中该时间的时区感知DateTime对象。类似于Local对象,但使用指定的时区而不是本地时区。

std::env::set_var("TZ", "America/New_York");
let x = Local.ymd(2019, 12, 1).and_hms(2, 0, 0);

这给出了我想要的结果,但我不想设置TZ环境变量,因为我希望Local保持本地时间,并且我需要能够针对不同情况更改TZ,而chrono仅读取TZ环境变量一次,据我所知。
我想要的是
设x =???.tz(“美国/约克”).ymd(2019,12,1).和_hms(2,0,0);
这将返回一个时区感知的DateTime,它将在给定时区的情况下正确地处理诸如添加和减去持续时间之类的操作。因此,FixeOffest不起作用,因为添加一个跨越夏令时过渡的持续时间,例如,不会(根据我的经验)产生具有正确偏移量的结果-它将保持在原始的固定偏移量,即使它在新的日期不适用。
有这样的事情吗?我可以用指定的TZ创建一个Local对象而不设置TZ环境变量吗?

kuarbcqp

kuarbcqp1#

您只需使用chrono_tz

use chrono::TimeZone;
use chrono_tz::Tz;
fn main() {
    let x = chrono_tz::America::New_York.with_ymd_and_hms(2019, 12, 1, 2, 0, 0);
    // or with parsing from a string:
    let y = "America/New_York"
        .parse::<Tz>()
        .unwrap()
        .with_ymd_and_hms(2022, 12, 1, 1, 39, 0);
    dbg!(x, y);
}

相关问题