diff --git a/Cargo.toml b/Cargo.toml index f128fc3..94bc3d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" toml = "0.8" dirs = "5.0" +chrono = "0.4" [profile.release] lto = true diff --git a/releases/zfsdu-linux-amd64 b/releases/zfsdu-linux-amd64 index a650722..c5b4546 100644 Binary files a/releases/zfsdu-linux-amd64 and b/releases/zfsdu-linux-amd64 differ diff --git a/src/ui.rs b/src/ui.rs index 5468366..8fa5d4a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -490,29 +490,9 @@ fn create_size_bar(size: u64, max_size: u64) -> String { fn format_date(timestamp: &str) -> String { // ZFS returns timestamp as Unix epoch seconds if let Ok(ts) = timestamp.parse::() { - use std::time::{UNIX_EPOCH, Duration}; - if let Some(datetime) = UNIX_EPOCH.checked_add(Duration::from_secs(ts as u64)) { - // Format as YYYY-MM-DD - let secs = datetime.duration_since(UNIX_EPOCH).unwrap().as_secs(); - let days = secs / 86400; - let years_since_1970 = days / 365; - let year = 1970 + years_since_1970; - - // Simplified date calculation - let remaining_days = days - (years_since_1970 * 365) - (years_since_1970 / 4); - let month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let mut month = 1; - let mut day = remaining_days; - - for (i, &m_days) in month_days.iter().enumerate() { - if day < m_days as u64 { - month = i + 1; - break; - } - day -= m_days as u64; - } - - return format!("{:04}-{:02}-{:02}", year, month, day + 1); + use chrono::{DateTime, Utc}; + if let Some(dt) = DateTime::::from_timestamp(ts, 0) { + return dt.format("%Y-%m-%d").to_string(); } } // Return original if parsing fails