获取指定时区的当前时间

Getting the current time in specified timezone

如何使用Chrono-TZ library获取指定时区的当前时间?

我试过了

let naive_dt = Local::now().naive_local();
let dt = Los_Angeles.from_local_datetime(&naive_dt).unwrap();
println!("{:#?}", dt);

但这打印了我当前时区的日期时间,并附加了请求的时区标识符,从而给我一个因时区差异而偏离的日期时间。

例如,在 18:30 AEST (UTC+10),我询问 PST (UTC-8) 的当前时间。它应该是 00:30 PST。相反,我得到 18:30 PST

根据 UTC 而非本地时间构建值。

let utc = UTC::now().naive_utc();
let dt = Los_Angeles.from_utc_datetime(&utc);

您可以使用 chrono::DateTime::with_timezoneDateTime<Utc> 转换为另一个时区。

示例:

#![forbid(unsafe_code)]
use chrono::{DateTime, Utc};
use chrono_tz::Tz;
use chrono_tz::US::Pacific;

fn main() {
    let pacific_now: DateTime<Tz> = Utc::now().with_timezone(&Pacific);
    println!("pacific_now = {}", pacific_now);
}
$ cargo run --bin example
pacific_now = 2021-07-01 23:22:11.052490 PDT