【问题标题】:How do I convert a chrono `DateTime<Local>` instance to `DateTime<Utc>`?如何将 chrono `DateTime<Local>` 实例转换为 `DateTime<Utc>`?
【发布时间】:2023-03-21 13:40:02
【问题描述】:

之前有一个question要求以另一种方式进行转换(Utc -&gt; Local)


我正在尝试将Local 日期时间转换为Utc 时间:

use chrono::{Local, UTC, TimeZone};

let utc = chrono::UTC::now(); // 2019-07-04 15:13:19.014970700 
let local = chrono::Local::now(); // 2019-07-04 17:13:19.014970700 +03:00

我目前期待一些 API,例如 local.to_utc()。也许我可以为这种转换实现 TryFrom 特征。

如何将Local 日期时间转换为Utc 日期时间?

【问题讨论】:

    标签: time rust


    【解决方案1】:

    Chrono 提供了 TimeZone 特征,它具有方法 from_local_datetime

    use chrono::prelude::*;
    
    fn main() {
        let local = Local::now();
        let utc = Utc
            .from_local_datetime(&local.naive_local())
            .single()
            .unwrap();
    
        dbg!(local.naive_local());
        dbg!(utc);
    }
    

    在我的本地机器上它给了我:

    [src/main.rs:10] local.naive_local() = 2019-07-04T14:25:15.093909965
    [src/main.rs:11] utc = 2019-07-04T12:25:15.093909965Z
    

    【讨论】:

      【解决方案2】:

      从 chrono 0.4.7 开始,现在以更简洁的方式处理了这一点:

      use chrono::prelude::*;
      
      fn main() {
          let utc = Utc::now();
          let local = Local::now();
          let converted: DateTime<Utc> = DateTime::from(local);
          println!("{}\n{}", utc, converted);
      }
      

      这给出了以下输出:

      2019-07-30 18:19:27.176827 UTC
      2019-07-30 18:19:27.176836 UTC
      

      【讨论】:

        【解决方案3】:

        您可以使用chrono::DateTime::with_timezone 将任何DateTime 转换为另一个时区。

        它适用于实现TimeZone 的结构: chrono::Localchrono::Utc。和chrono_tz::Tz

        例子:

        #![forbid(unsafe_code)]
        use chrono::{DateTime, Local, Utc};
        
        fn main() {
            let local_now: DateTime<Local> = Local::now();
            let utc_now: DateTime<Utc> = local_now.with_timezone(&Utc);
            println!("local = {}", local_now);
            println!("utc = {}", utc_now);
        }
        
        $ cargo run --bin example
        local = 2021-07-01 15:45:26.251802 -07:00
        utc = 2021-07-01 22:45:26.251802 UTC
        

        【讨论】:

          猜你喜欢
          • 2015-04-29
          • 1970-01-01
          • 1970-01-01
          • 2012-12-05
          • 2011-09-29
          • 1970-01-01
          • 2016-06-19
          • 2022-08-18
          • 1970-01-01
          相关资源
          最近更新 更多