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>有很大的推动作用,但是oldtime是私有的,所以我不知道如何创建oldtime::Duration。
我如何得到我需要的Add激励?如何将std::time::Duration转换为chrono::oldtime::Duration?有什么东西我可以导入来隐式转换吗?
我用的是rustc 1.25.0 (84203cac6 2018-03-25)
发布于 2018-05-01 22:00:28
发布于 2018-05-01 22:00:17
这几乎是通过引用chrono 文档的话来回答的。
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.0.0之前,这一经验可能会得到改进。
https://stackoverflow.com/questions/50124299
复制相似问题