首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性`std::ops::Add<std::time::Duration>`不是为`chrono::DateTime<chrono::Utc>`实现的

属性`std::ops::Add<std::time::Duration>`不是为`chrono::DateTime<chrono::Utc>`实现的
EN

Stack Overflow用户
提问于 2018-05-01 21:45:35
回答 2查看 1.5K关注 0票数 5
代码语言:javascript
复制
extern crate chrono;
use chrono::{DateTime, Utc};
use std::time::Duration;

pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
    start + Duration::from_secs(1)
}

在以下方面失败:

代码语言:javascript
复制
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.rsAdd<chrono::oldtime::Duration>有很大的推动作用,但是oldtime是私有的,所以我不知道如何创建oldtime::Duration

我如何得到我需要的Add激励?如何将std::time::Duration转换为chrono::oldtime::Duration?有什么东西我可以导入来隐式转换吗?

我用的是rustc 1.25.0 (84203cac6 2018-03-25)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-01 22:00:28

有一些函数可以转换从… std::time::Duration,所以您可以这样做:

代码语言:javascript
复制
start + ::chrono::Duration::from_std(Duration::from_secs(1)).expect("1s can't overflow")

但是如果你能坚持chrono,那么就坚持chrono

代码语言:javascript
复制
use chrono::{DateTime, Utc, Duration};
start + Duration::seconds(1)
票数 6
EN

Stack Overflow用户

发布于 2018-05-01 22:00:17

这几乎是通过引用chrono 文档的话来回答的。

Chrono目前使用时间机箱中的time::Duration类型来表示时间跨度的大小。由于在持续时间内,该类型与更新的标准类型具有相同的名称,因此引用将此类型称为OldDuration。..。 Chrono本机还不支持标准的Duration类型,但它将在将来得到支持。同时,可以使用Duration::from_stdDuration::to_std方法在两种类型之间进行转换。

因此,必须用这个OldDuration来添加一个时间间隔,这个时间实际上是名为Duration从板条箱的根导出

代码语言:javascript
复制
use chrono::{DateTime, Utc, Duration as OldDuration};

然后,可以通过直接创建OldDuration来添加持续时间:

代码语言:javascript
复制
pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
    start + OldDuration::seconds(1)
}

或者转换一个标准的持续时间。

代码语言:javascript
复制
pub fn after(start: DateTime<Utc>) -> DateTime<Utc> {
    start + OldDuration::from_std(Duration::from_secs(1)).unwrap()
}

chrono达到1.0.0之前,这一经验可能会得到改进。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50124299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档