diff --git a/src/uu/date/src/date.rs b/src/uu/date/src/date.rs index 02737dca28e..c60779e2d17 100644 --- a/src/uu/date/src/date.rs +++ b/src/uu/date/src/date.rs @@ -6,7 +6,7 @@ // spell-checker:ignore (chrono) Datelike Timelike ; (format) DATEFILE MMDDhhmm ; (vars) datetime datetimes use chrono::format::{Item, StrftimeItems}; -use chrono::{DateTime, FixedOffset, Local, Offset, TimeDelta, Utc}; +use chrono::{DateTime, FixedOffset, Local, NaiveDate, Offset, TimeDelta, Utc}; #[cfg(windows)] use chrono::{Datelike, Timelike}; use clap::{crate_version, Arg, ArgAction, Command}; @@ -222,6 +222,12 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { // Iterate over all dates - whether it's a single date or a file. let dates: Box> = match settings.date_source { DateSource::Custom(ref input) => { + + let input = NaiveDate::parse_from_str(input, "%Y-%m-%d") + .expect(format!("invalid date {}", input).as_str()) + .format("%Y-%m-%d") + .to_string(); + let date = parse_date(input.clone()); let iter = std::iter::once(date); Box::new(iter) diff --git a/tests/by-util/test_date.rs b/tests/by-util/test_date.rs index 553414af853..82a67e6f4fc 100644 --- a/tests/by-util/test_date.rs +++ b/tests/by-util/test_date.rs @@ -420,6 +420,14 @@ fn test_invalid_date_string() { .stderr_contains("invalid date"); } +#[test] +fn test_date_set_check_valid_format() { + new_ucmd!() + .arg("-d") + .arg("2000-1-4") + .succeeds(); +} + #[test] fn test_date_one_digit_date() { new_ucmd!()