use chrono::TimeDelta;
pub trait TimeDeltaExt {
fn to_hm_string(&self) -> String;
fn total_hours(&self) -> f32;
}
impl TimeDeltaExt for TimeDelta {
fn to_hm_string(&self) -> String {
let hours = self.num_hours();
let minutes = self.num_minutes() % 60;
format!("{hours:02}h {minutes:02}m")
}
fn total_hours(&self) -> f32 {
self.as_seconds_f32() / 3600.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_to_readable_string() {
let delta = TimeDelta::hours(1) + TimeDelta::minutes(45) + TimeDelta::seconds(3);
assert_eq!(delta.to_hm_string(), "01h 45m");
}
#[test]
#[expect(clippy::float_cmp)]
fn test_total_hours() {
let delta = TimeDelta::hours(5) + TimeDelta::minutes(45);
assert_eq!(delta.total_hours(), 5.75);
}
}