簡體   English   中英

如何使用 rust chrono 在指定時區的指定日期和時間獲取 DateTime

[英]How to get a DateTime at a specified date and time in a specified timezone with rust chrono

我有一個時區名稱,例如“America/New_York”以及該時區特定時間的年、月、日、小時、分鍾和秒。 我怎樣才能在那個時區的那個時間獲得一個時區感知 DateTime object 。 類似於本地 object,但使用指定時區而不是本地時區。

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("America/New_York").ymd(2019, 12, 1).and_hms(2, 0, 0);

這將返回一個時區感知 DateTime,它將在給定時區的情況下正確處理諸如添加和減去持續時間之類的操作。 因此,FixeOffest 不起作用,因為添加一個跨越夏令時轉換的持續時間,例如,不會(根據我的經驗)產生具有正確偏移量的結果 - 它保持在原始固定偏移量,即使它沒有'在新日期申請。

有這樣的事嗎? 我可以在不設置TZ環境變量的情況下使用指定的TZ制作本地object嗎?

您可以簡單地使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM