@@ -15,7 +15,7 @@ use jiff::{Timestamp, Zoned};
1515use std:: borrow:: Cow ;
1616use std:: collections:: HashMap ;
1717use std:: fs:: File ;
18- use std:: io:: { BufRead , BufReader , BufWriter , Read , Write } ;
18+ use std:: io:: { BufRead , BufReader , BufWriter , Read , Write , stderr } ;
1919use std:: path:: PathBuf ;
2020use std:: sync:: OnceLock ;
2121use uucore:: display:: Quotable ;
@@ -436,7 +436,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
436436 format ! ( "{date_part} 00:00 {offset}" )
437437 } ;
438438 if settings. debug {
439- eprintln ! ( "date: warning: using midnight as starting time: 00:00:00" ) ;
439+ let _ = writeln ! (
440+ stderr( ) ,
441+ "date: warning: using midnight as starting time: 00:00:00"
442+ ) ;
440443 }
441444 parse_date ( composed, & now, DebugOptions :: new ( settings. debug , false ) )
442445 } else if let Some ( ( total_hours, day_delta) ) = military_tz_with_offset {
@@ -895,22 +898,25 @@ fn parse_date<S: AsRef<str> + Clone>(
895898 let input_str = s. as_ref ( ) ;
896899
897900 if dbg_opts. debug {
898- eprintln ! ( "date: input string: {input_str}" ) ;
901+ let _ = writeln ! ( stderr ( ) , "date: input string: {input_str}" ) ;
899902 }
900903
901904 // First, try to parse any timezone abbreviations
902905 if let Some ( zoned) = try_parse_with_abbreviation ( input_str, now) {
903906 if dbg_opts. debug {
904- eprintln ! (
907+ let mut err = stderr ( ) . lock ( ) ;
908+ let _ = writeln ! (
909+ err,
905910 "date: parsed date part: (Y-M-D) {}" ,
906911 strtime:: format( "%Y-%m-%d" , & zoned) . unwrap_or_default( )
907912 ) ;
908- eprintln ! (
913+ let _ = writeln ! (
914+ err,
909915 "date: parsed time part: {}" ,
910916 strtime:: format( "%H:%M:%S" , & zoned) . unwrap_or_default( )
911917 ) ;
912918 let tz_display = zoned. time_zone ( ) . iana_name ( ) . unwrap_or ( "system default" ) ;
913- eprintln ! ( "date: input timezone: {tz_display}" ) ;
919+ let _ = writeln ! ( err , "date: input timezone: {tz_display}" ) ;
914920 }
915921 return Ok ( zoned) ;
916922 }
@@ -922,17 +928,20 @@ fn parse_date<S: AsRef<str> + Clone>(
922928 let result = date. timestamp ( ) . to_zoned ( now. time_zone ( ) . clone ( ) ) ;
923929 if dbg_opts. debug {
924930 // Show final parsed date and time
925- eprintln ! (
931+ let mut err = stderr ( ) . lock ( ) ;
932+ let _ = writeln ! (
933+ err,
926934 "date: parsed date part: (Y-M-D) {}" ,
927935 strtime:: format( "%Y-%m-%d" , & result) . unwrap_or_default( )
928936 ) ;
929- eprintln ! (
937+ let _ = writeln ! (
938+ err,
930939 "date: parsed time part: {}" ,
931940 strtime:: format( "%H:%M:%S" , & result) . unwrap_or_default( )
932941 ) ;
933942
934943 // Show timezone information
935- eprintln ! ( "date: input timezone: system default" ) ;
944+ let _ = writeln ! ( err , "date: input timezone: system default" ) ;
936945
937946 // Check if time component was specified, if not warn about midnight usage
938947 // Only warn for date-only inputs (no time specified), but not for epoch formats (@N)
@@ -941,7 +950,10 @@ fn parse_date<S: AsRef<str> + Clone>(
941950 // Input likely didn't specify a time, so midnight was assumed
942951 let time_str = strtime:: format ( "%H:%M:%S" , & result) . unwrap_or_default ( ) ;
943952 if time_str == "00:00:00" {
944- eprintln ! ( "date: warning: using midnight as starting time: 00:00:00" ) ;
953+ let _ = writeln ! (
954+ err,
955+ "date: warning: using midnight as starting time: 00:00:00"
956+ ) ;
945957 }
946958 }
947959 }
0 commit comments