我的目标是将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
特征。但是,我错过了一些东西。
答案 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);
}