获取指定时区的当前时间

Syn*_*sso 6 rust rust-chrono chrono-tz

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

我试过

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

但这会在我当前的时区打印日期时间,并附上请求的时区标识符,从而为我提供一个因时区差异而关闭的日期时间。

例如,在美国东部标准时间 18:30 (UTC+10),我询问 PST (UTC-8) 中的当前时间。应该是太平洋标准时间 00:30。相反,我得到 18:30 PST

Syn*_*sso 7

根据 UTC 而不是本地时间构造值。

let utc = UTC::now().naive_utc();
let dt = Los_Angeles.from_utc_datetime(&utc);
Run Code Online (Sandbox Code Playgroud)


M. *_*ard 5

您可以使用chrono::DateTime::with_timezone将时区转换DateTime<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);
}
Run Code Online (Sandbox Code Playgroud)
$ cargo run --bin example
pacific_now = 2021-07-01 23:22:11.052490 PDT
Run Code Online (Sandbox Code Playgroud)