我正在使用chrono crate
我已在i64
获得约会,我可以NaiveDateTime
获得NaiveDateTime::from_timestamp
我有Local::now()
当前时间我可以i64
获得.timestamp()
但是我仍然无法理解如何获得Duration
的{{1}},因为它告诉Sub如果我这样尝试就不会实现
如果我在i64时间戳中获得差异,如何将其转换为my_time - current_time
?
e.g。我想要类似的东西但是没有实现sub
Duration
答案 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);
chrono
的未来版本(0.4.1之后)将支持减去作为调用.signed_duration_since
的替代方法,只要两个操作数具有相同的时区类型即可。 PR #237因此,最终可以写出这个:
let diff = now.with_timezone(&Utc) - other_dt;