如何计算两个 chrono::DateTime 之间的持续时间?

Posted

技术标签:

【中文标题】如何计算两个 chrono::DateTime 之间的持续时间?【英文标题】:How to compute the duration between two chrono::DateTime? 【发布时间】:2020-07-17 08:04:14 【问题描述】:

我正在使用 chrono 板条箱并希望计算两个 DateTimes 之间的 Duration

use chrono::Utc;
use chrono::offset::TimeZone;

let start_of_period = Utc.ymd(2020, 1, 1).and_hms(0, 0, 0);
let end_of_period = Utc.ymd(2021, 1, 1).and_hms(0, 0, 0);

// What should I enter here?
//
// The goal is to find a duration so that
// start_of_period + duration == end_of_period
// I expect duration to be of type std::time
let duration = ... 

let nb_of_days = duration.num_days();

【问题讨论】:

【参考方案1】:

DateTime 实现了Sub<DateTime>,所以你可以从第一个日期中减去最近的日期:

let duration = end_of_period - start_of_period;
println!("num days = ", duration.num_days());

【讨论】:

【参考方案2】:

查看 Utc 的文档:https://docs.rs/chrono/0.4.11/chrono/offset/struct.Utc.html

通过调用.now(或.today)方法,您将返回一个实现Sub<Date<Tz>> for Date<Tz>的结构,从源代码中您可以看到它返回一个OldDuration,它只是@987654323 周围的一个类型别名@。

最后,您可以将Duration 与实现Add 的其他类型一起使用,例如DateTime

所以代码应该是这样的:

let start_of_period = Utc.ymd(2020, 1, 1).and_hms(0, 0, 0);
let end_of_period = Utc.ymd(2021, 1, 1).and_hms(0, 0, 0);

let duration = end_of_period.now() - start_of_period.now();

【讨论】:

以上是关于如何计算两个 chrono::DateTime 之间的持续时间?的主要内容,如果未能解决你的问题,请参考以下文章

`chrono::DateTime<chrono::Utc>` 没有实现特征`std::ops::Add<std::time::Duration>`

Rust Chrono 解析日期字符串、ParseError(NotEnough) 和 ParseError(TooShort)

access计算日期之差

《从0开始学大数据》之MapReduce 计算框架是如何运作的

如何计算两个日期之间的差异?

如何为计时时间戳使用自定义 serde 反序列化器?