Merge pull request #7548 from lewisboon/bugfix/date-negative-offset

date: allow negative date offsets
This commit is contained in:
Sylvestre Ledru 2025-03-26 08:49:46 +01:00 committed by GitHub
commit d33d731804
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 0 deletions

View file

@ -318,6 +318,7 @@ pub fn uu_app() -> Command {
.short('d')
.long(OPT_DATE)
.value_name("STRING")
.allow_hyphen_values(true)
.help("display time described by STRING, not 'now'"),
)
.arg(

View file

@ -1,3 +1,4 @@
use chrono::{DateTime, Duration, Utc};
// This file is part of the uutils coreutils package.
//
// For the full copyright and license information, please view the LICENSE
@ -412,6 +413,31 @@ fn test_date_string_human() {
}
}
#[test]
fn test_negative_offset() {
let data_formats = vec![
("-1 hour", Duration::hours(1)),
("-1 hours", Duration::hours(1)),
("-1 day", Duration::days(1)),
("-2 weeks", Duration::weeks(2)),
];
for (date_format, offset) in data_formats {
new_ucmd!()
.arg("-d")
.arg(date_format)
.arg("--rfc-3339=seconds")
.succeeds()
.stdout_str_check(|out| {
let date = DateTime::parse_from_rfc3339(out.trim()).unwrap();
// Is the resulting date roughly what is expected?
let expected_date = Utc::now() - offset;
date > expected_date - Duration::minutes(10)
&& date < expected_date + Duration::minutes(10)
});
}
}
#[test]
fn test_invalid_date_string() {
new_ucmd!()