在指定时区获取当前时间

10
使用Chrono-TZ库,如何获取指定时区的当前时间?
我尝试过:
let naive_dt = Local::now().naive_local();
let dt = Los_Angeles.from_local_datetime(&naive_dt).unwrap();
println!("{:#?}", dt);

但是,这样打印出的日期时间以我的当前时区为准,并附加了所请求的时区标识符,从而给我一个偏移了时区差异的日期时间。

例如,在澳大利亚东部标准时间18:30(UTC+10)时,我要求在太平洋标准时间(UTC-8)获取当前时间。应该是00:30 PST。但是我得到了18:30 PST。

2个回答

9

基于UTC构建值,而不是本地时间。

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

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);
}

$ cargo run --bin example
pacific_now = 2021-07-01 23:22:11.052490 PDT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接