如何从两个DateTime / NaiveDateTime获取持续时间?

时间:2018-03-26 09:08:19

标签: rust

我正在使用chrono crate

我已在i64获得约会,我可以NaiveDateTime获得NaiveDateTime::from_timestamp

我有Local::now()当前时间我可以i64获得.timestamp()

但是我仍然无法理解如何获得Duration的{​​{1}},因为它告诉Sub如果我这样尝试就不会实现

如果我在i64时间戳中获得差异,如何将其转换为my_time - current_time

e.g。我想要类似的东西但是没有实现sub

Duration

1 个答案:

答案 0 :(得分:3)

两种日期时间类型不兼容,因为NaiveDateTime缺少时区。在这种情况下,由于您是使用NaiveDateTime::from_timestamp获取的,因此可以先将其转换为DateTime<Utc>,然后使用signed_duration_since获取差异。

let now = Local::now();
let naive_dt = NaiveDate::from_ymd(2018, 3, 26).and_hms(10, 02, 0);
let other_dt = DateTime::<Utc>::from_utc(naive_dt, Utc);

let diff = now.signed_duration_since(other_dt);

Playground

chrono的未来版本(0.4.1之后)将支持减去作为调用.signed_duration_since的替代方法,只要两个操作数具有相同的时区类型即可。 PR #237因此,最终可以写出这个:

let diff = now.with_timezone(&Utc) - other_dt;