1pub fn fmt_ts(ms: u64) -> String {
6 if ms == 0 {
7 return "(unknown)".to_string();
8 }
9 let secs = ms / 1000;
10 let days = secs / 86400;
11 let time_secs = secs % 86400;
12 let h = time_secs / 3600;
13 let m = (time_secs % 3600) / 60;
14 let (y, mo, d) = days_to_ymd(days);
15 format!("{y:04}-{mo:02}-{d:02} {h:02}:{m:02}")
16}
17
18fn days_to_ymd(days: u64) -> (u64, u64, u64) {
20 let z = days + 719468;
21 let era = z / 146097;
22 let doe = z % 146097;
23 let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
24 let y = yoe + era * 400;
25 let doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
26 let mp = (5 * doy + 2) / 153;
27 let d = doy - (153 * mp + 2) / 5 + 1;
28 let mo = if mp < 10 { mp + 3 } else { mp - 9 };
29 let y = if mo <= 2 { y + 1 } else { y };
30 (y, mo, d)
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn zero_returns_unknown() {
39 assert_eq!(fmt_ts(0), "(unknown)");
40 }
41
42 #[test]
43 fn known_epoch() {
44 assert_eq!(fmt_ts(1776816000000), "2026-04-22 00:00");
46 }
47}