From b3ea308997f706b4f0f7da6684b9d1beaf383355 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Thu, 8 Feb 2024 19:06:49 -0500 Subject: [PATCH] Fix some logic errors (requires testing) --- src/datetime.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/datetime.rs b/src/datetime.rs index 41b0c2a..0ce078b 100644 --- a/src/datetime.rs +++ b/src/datetime.rs @@ -65,36 +65,36 @@ impl DateTime { /// Converts a Unix timestamp to a `DateTime` struct pub fn from_timestamp(ts: i64) -> Self { if ts < 0 { - let mut seconds: i64 = 0; - let mut year = Year::new(-1); - while seconds > -year.seconds() { - seconds -= year.seconds(); + let mut seconds: i64 = ts; + let mut year = Year::new(1969); + while seconds < -year.seconds() { + seconds += year.seconds(); year = year.previous(); } let mut month = Some(Month::December); while month.is_some() { let m = month.unwrap(); - if seconds > m.seconds(year) { + if seconds < -m.seconds(year) { break; } - seconds -= m.seconds(year); + seconds += m.seconds(year); month = m.previous(); } let month = month.unwrap(); let mut day = month.days(year); while day > 0 && seconds < -SECONDS_PER_DAY { - seconds -= SECONDS_PER_HOUR; + seconds += SECONDS_PER_DAY; day -= 1; } let mut hour: i8 = 23; while hour >= 0 && seconds < -SECONDS_PER_HOUR { - seconds -= SECONDS_PER_HOUR; + seconds += SECONDS_PER_HOUR; hour -= 1; } let hour = hour.try_into().unwrap(); let mut minute: i8 = 60; while minute >= 0 && seconds < -60 { - seconds -= 60; + seconds += 60; minute -= 1; } let minute = minute.try_into().unwrap();