use chrono::{DateTime, Utc};
pub fn trunc_ms(dt: DateTime<Utc>) -> DateTime<Utc> {
DateTime::from_timestamp_millis(dt.timestamp_millis()).unwrap_or(dt)
}
pub fn fmt_rfc3339_ms(dt: DateTime<Utc>) -> String {
dt.format("%Y-%m-%dT%H:%M:%S%.3fZ").to_string()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ms_truncation_drops_sub_ms() {
let dt = DateTime::from_timestamp_nanos(1_700_000_000_123_456_789);
let truncated = trunc_ms(dt);
assert_eq!(truncated.timestamp_subsec_nanos() % 1_000_000, 0);
}
#[test]
fn fmt_emits_canonical_form() {
let dt = DateTime::from_timestamp_millis(1_700_000_000_123).unwrap();
let s = fmt_rfc3339_ms(dt);
assert!(s.ends_with("Z"), "got {s}");
assert!(s.contains(".123"), "got {s}");
}
}