代码之家  ›  专栏  ›  技术社区  ›  Synesso

获取指定时区中的当前时间

  •  6
  • Synesso  · 技术社区  · 8 年前

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

    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。取而代之的是太平洋标准时间18:30

    2 回复  |  直到 8 年前
        1
  •  7
  •   Synesso    8 年前

    let utc = UTC::now().naive_utc();
    let dt = Los_Angeles.from_utc_datetime(&utc);
    
        2
  •  1
  •   M. Leonhard    3 年前

    你可以使用 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
    
    推荐文章