如何将 chrono `DateTime<Local>` 实例转换为 `DateTime<Utc>`?

Web*_*rix 5 time rust

之前有一个问题问过其他方式的转换(Utc -> 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 8

从 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);
}
Run Code Online (Sandbox Code Playgroud)

输出为:

use chrono::prelude::*;

fn main() {
    let utc = Utc::now();
    let local = Local::now();
    let converted: DateTime<Utc> = DateTime::from(local);
    println!("{}\n{}", utc, converted);
}
Run Code Online (Sandbox Code Playgroud)


hel*_*low 5

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);
}
Run Code Online (Sandbox Code Playgroud)

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

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