如何将chrono`DateTime <utc>`实例转换为`DateTime <local>`?</local> </utc>

时间:2015-02-26 16:30:58

标签: datetime rust

我的目标是将utc转换为loc

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

let utc = chrono::UTC::now();
let loc = chrono::Local::now();

println!("{:?}", utc);
println!("{:?}", loc);

println!("{:?}", utc.with_timezone(&Local));
println!("{:?}", Local.from_utc_datetime(&utc.naive_local()));

...产生了以下输出:

2015-02-26T16:22:27.873593Z
2015-02-26T17:22:27.873663+01:00
2015-02-26T15:22:27.873593+00:00
2015-02-26T15:22:27.873593+00:00

第二行中显示的loc时间是转换utc时我想看到的内容。

如何将DateTime<UTC>实例正确转换为DateTime<Local>

我正在使用chrono 0.2.2。在DateTime.from_utc方法中,它甚至告诉我应该使用TimeZone特征。但是,我错过了一些东西。

2 个答案:

答案 0 :(得分:5)

哎呀,谢谢你的举报。这是一个错误并注册为问题#26。这应该在Chrono 0.2.3中修复。

除了错误之外,utc.with_timezone(&Local)确实是转换为本地时间的正确方法。 utc.with_timezone(&Local).with_timezone(&UTC)应该等于utc的重要身份(除了特殊情况,本地时区已更改)。

答案 1 :(得分:1)

从chrono 0.4.7开始,您可以通过一种更简单的方式在使用from trait之间进行转换:

use chrono::prelude::*;

fn main() {
    let utc = Utc::now();
    let local = Local::now();
    let converted: DateTime<Local> = DateTime::from(utc);
}