extern crate chrono;
use chrono::{DateTime, Utc};
use std::time::Duration;
pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
start + Duration::from_secs(1)
}
失败了:
error[E0277]: cannot add `std::time::Duration` to `chrono::DateTime<chrono::Utc>`
--> src/lib.rs:7:11
|
7 | start + Duration::from_secs(1_000_000_000)
| ^ no implementation for `chrono::DateTime<chrono::Utc> + std::time::Duration`
|
= help: the trait `std::ops::Add<std::time::Duration>` is not implemented for `chrono::DateTime<chrono::Utc>`
我无法找到导入Add
的实现。 use chrono::*
没有得到帮助。
我发现datetime.rs
有Add<chrono::oldtime::Duration>
的impl,但oldtime
是私有的,因此我不知道如何创建oldtime::Duration
。
如何获得我需要的Add
impl?如何将std::time::Duration
转换为chrono::oldtime::Duration
?有什么我可以导入隐式转换吗?
我正在使用rustc 1.25.0 (84203cac6 2018-03-25)
答案 0 :(得分:5)
这几乎是来自chrono
documentation:
Chrono目前使用时间箱中的
time::Duration
类型来表示时间跨度的大小。由于此名称与较新的标准类型具有相同的持续时间,因此引用将此类型称为OldDuration
。 [...]Chrono尚未原生支持标准
Duration
类型,但将来会支持它。同时,您可以使用Duration::from_std
和Duration::to_std
方法在两种类型之间进行转换。
因此,必须使用OldDuration
Duration
添加持续时间到时间日期 - use chrono::{DateTime, Utc, Duration as OldDuration};
,其名称为OldDuration
:
pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
start + OldDuration::seconds(1)
}
然后,可以通过直接创建pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
start + OldDuration::from_std(Duration::from_secs(1)).unwrap()
}
来添加持续时间:
chrono
或转换标准时长。
{{1}}
在{{1}}达到1.0.0之前,可能会改善此体验。
答案 1 :(得分:5)