Skip to main content

systemprompt_models/
time_format.rs

1//! `time_format` module — see crate-level docs for context.
2
3use chrono::{DateTime, Utc};
4
5pub fn format_timestamp(dt: DateTime<Utc>) -> String {
6    dt.format("%Y-%m-%d %H:%M:%S").to_string()
7}
8
9pub fn format_date(dt: DateTime<Utc>) -> String {
10    dt.format("%Y-%m-%d").to_string()
11}
12
13pub fn format_date_range(start: DateTime<Utc>, end: DateTime<Utc>) -> String {
14    format!("{} to {}", format_date(start), format_date(end))
15}
16
17pub fn format_duration_ms(ms: i64) -> String {
18    match ms {
19        ms if ms < 1000 => format!("{}ms", ms),
20        ms if ms < 60_000 => format!("{:.1}s", ms as f64 / 1000.0),
21        ms if ms < 3_600_000 => format!("{:.1}m", ms as f64 / 60_000.0),
22        _ => format!("{:.1}h", ms as f64 / 3_600_000.0),
23    }
24}
25
26pub fn format_optional_duration_ms(ms: Option<i64>) -> String {
27    ms.map_or_else(String::new, |d| format!(" ({}ms)", d))
28}
29
30pub fn format_period_label(dt: DateTime<Utc>, period: &str) -> String {
31    match period {
32        "hour" => dt.format("%Y-%m-%d %H:00").to_string(),
33        "day" => format_date(dt),
34        "week" => format!("Week of {}", format_date(dt)),
35        "month" => dt.format("%Y-%m").to_string(),
36        _ => format_timestamp(dt),
37    }
38}