|
8 | 8 | mod locale; |
9 | 9 |
|
10 | 10 | use clap::{Arg, ArgAction, Command}; |
11 | | -use jiff::fmt::strtime; |
| 11 | +use jiff::fmt::strtime::{self, BrokenDownTime, Config, PosixCustom}; |
12 | 12 | use jiff::tz::{TimeZone, TimeZoneDatabase}; |
13 | 13 | use jiff::{Timestamp, Zoned}; |
14 | 14 | use std::collections::HashMap; |
@@ -431,21 +431,23 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { |
431 | 431 | let mut stdout = BufWriter::new(std::io::stdout().lock()); |
432 | 432 |
|
433 | 433 | // Format all the dates |
| 434 | + let config = Config::new().custom(PosixCustom::new()).lenient(true); |
434 | 435 | for date in dates { |
435 | 436 | match date { |
436 | | - // TODO: Switch to lenient formatting. |
437 | | - Ok(date) => match strtime::format(format_string, &date) { |
438 | | - Ok(s) => writeln!(stdout, "{s}").map_err(|e| { |
439 | | - USimpleError::new(1, translate!("date-error-write", "error" => e)) |
440 | | - })?, |
441 | | - Err(e) => { |
442 | | - let _ = stdout.flush(); |
443 | | - return Err(USimpleError::new( |
444 | | - 1, |
445 | | - translate!("date-error-invalid-format", "format" => format_string, "error" => e), |
446 | | - )); |
| 437 | + Ok(date) => { |
| 438 | + match BrokenDownTime::from(&date).to_string_with_config(&config, format_string) { |
| 439 | + Ok(s) => writeln!(stdout, "{s}").map_err(|e| { |
| 440 | + USimpleError::new(1, translate!("date-error-write", "error" => e)) |
| 441 | + })?, |
| 442 | + Err(e) => { |
| 443 | + let _ = stdout.flush(); |
| 444 | + return Err(USimpleError::new( |
| 445 | + 1, |
| 446 | + translate!("date-error-invalid-format", "format" => format_string, "error" => e), |
| 447 | + )); |
| 448 | + } |
447 | 449 | } |
448 | | - }, |
| 450 | + } |
449 | 451 | Err((input, _err)) => { |
450 | 452 | let _ = stdout.flush(); |
451 | 453 | show!(USimpleError::new( |
|
0 commit comments