Как вычислить продолжительность между двумя chrono::DateTime?

Я использую хроно клеть и хочу вычислитьDuration между двумя DateTimeс.

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();

2 ответа

Решение

DateTime орудия Sub<DateTime>, так что вы можете просто вычесть самую последнюю дату из первой:

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

Увидев документы Utc: https://docs.rs/chrono/0.4.11/chrono/offset/struct.Utc.html

Вызывая либо метод .now (или .today) вы получите структуру, реализующую Sub<Date<Tz>> for Date<Tz>, из источника видно, что он возвращает OldDuration, который представляет собой просто псевдоним типа вокруг Duration.

Наконец, вы можете использовать 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();
Другие вопросы по тегам