use anyhow::Result; use chrono::{DateTime, Local,Duration, LocalResult, NaiveDateTime, TimeZone}; pub fn str_to_datetime(s: &str) -> Result> { let no_tz = s.replace("+00:00", ""); let dt = NaiveDateTime::parse_from_str(&no_tz, "%Y-%m-%d %H:%M:%S%.f")?; Ok(Local.from_utc_datetime(&dt)) } pub fn time_from_now(dt: &DateTime) -> Duration { let now = Local::now(); now - dt } pub fn format_duration(d: &Duration) -> String { let duration_in_seconds = d.num_seconds(); let hours = duration_in_seconds / 60 / 60; let minutes = (duration_in_seconds % 3600) / 60; let seconds = duration_in_seconds % 60; format!("{}:{:0>2}:{:0>2}", hours, minutes, seconds) }