From 9e5a280f7e7b0cf3e7a614e04d5b6c558a83c339 Mon Sep 17 00:00:00 2001 From: Darius-Constantin Date: Mon, 22 Dec 2025 20:44:05 +0200 Subject: [PATCH 1/2] date: fixed military format offset by 1 day in the future Signed-off-by: Darius-Constantin --- src/uu/date/src/date.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/uu/date/src/date.rs b/src/uu/date/src/date.rs index 93c08546691..64433b54cc5 100644 --- a/src/uu/date/src/date.rs +++ b/src/uu/date/src/date.rs @@ -8,6 +8,7 @@ mod locale; use clap::{Arg, ArgAction, Command}; +use jiff::ToSpan; use jiff::fmt::strtime; use jiff::tz::{TimeZone, TimeZoneDatabase}; use jiff::{Timestamp, Zoned}; @@ -297,8 +298,9 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } else if let Some(total_hours) = military_tz_with_offset { // Military timezone with optional hour offset // Convert to UTC time: midnight + military_tz_offset + additional_hours - let date_part = - strtime::format("%F", &now).unwrap_or_else(|_| String::from("1970-01-01")); + let yesterday = now.checked_sub(1.day()).unwrap_or(now); + let date_part = strtime::format("%F", &yesterday) + .unwrap_or_else(|_| String::from("1970-01-01")); let composed = format!("{date_part} {total_hours:02}:00:00 +00:00"); parse_date(composed) } else if is_pure_digits { From 96e553883cf3fbaf83f57cad34974e23829f99a3 Mon Sep 17 00:00:00 2001 From: Darius-Constantin Date: Mon, 22 Dec 2025 21:21:32 +0200 Subject: [PATCH 2/2] date: if military parsing cannot correct offset, it will now fallback to the first day possible Signed-off-by: Darius-Constantin --- src/uu/date/src/date.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/uu/date/src/date.rs b/src/uu/date/src/date.rs index 64433b54cc5..e717c99f6f3 100644 --- a/src/uu/date/src/date.rs +++ b/src/uu/date/src/date.rs @@ -298,9 +298,12 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } else if let Some(total_hours) = military_tz_with_offset { // Military timezone with optional hour offset // Convert to UTC time: midnight + military_tz_offset + additional_hours - let yesterday = now.checked_sub(1.day()).unwrap_or(now); - let date_part = strtime::format("%F", &yesterday) - .unwrap_or_else(|_| String::from("1970-01-01")); + let yesterday = now.checked_sub(1.day()); + let date_part = match yesterday { + Ok(yesterday) => strtime::format("%F", &yesterday) + .unwrap_or_else(|_| String::from("1970-01-01")), + Err(_) => String::from("1970-01-01"), + }; let composed = format!("{date_part} {total_hours:02}:00:00 +00:00"); parse_date(composed) } else if is_pure_digits {