execution_time/traits/
duration_extension.rsuse crate::{RoundFloat, Time};
use std::time::Duration;
const SECONDS_IN_DAY: f64 = 86400.0;
const SECONDS_IN_HOUR: f64 = 3600.0;
const SECONDS_IN_MINUTE: f64 = 60.0;
pub trait DurationExtension {
fn get_time(&self) -> Time;
}
impl DurationExtension for Duration {
fn get_time(&self) -> Time {
let all_seconds: f64 = self.as_secs_f64();
let remaining_day = all_seconds % SECONDS_IN_DAY;
let remaining_hour = remaining_day % SECONDS_IN_HOUR;
let days = (all_seconds / SECONDS_IN_DAY).floor() as u64;
let hours = (remaining_day / SECONDS_IN_HOUR).floor() as u8;
let minutes = (remaining_hour / SECONDS_IN_MINUTE).floor() as u8;
let seconds = (remaining_hour % SECONDS_IN_MINUTE).round_float(9);
Time {
days,
hours,
minutes,
seconds,
}
}
}