Fix date formatting overflow bug
- Use chrono library for proper date parsing from Unix timestamps - Fixes integer overflow in manual date calculation that caused dates to display as huge numbers like "2026-01-18446744073709551241"
This commit is contained in:
parent
1fb4dc0092
commit
edb7545a4d
@ -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
|
||||
|
||||
Binary file not shown.
26
src/ui.rs
26
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::<i64>() {
|
||||
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::<Utc>::from_timestamp(ts, 0) {
|
||||
return dt.format("%Y-%m-%d").to_string();
|
||||
}
|
||||
}
|
||||
// Return original if parsing fails
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user