@@ -204,10 +204,10 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
204204 }
205205 }
206206
207- let ts = s. as_ref ( ) . to_owned ( ) + "0000" ;
207+ let ts = s. as_ref ( ) . to_owned ( ) + " 0000" ;
208208 // Parse date only formats - assume midnight local timezone
209209 for fmt in [ format:: ISO_8601 , format:: ISO_8601_NO_SEP ] {
210- let f = fmt. to_owned ( ) + "%H%M" ;
210+ let f = fmt. to_owned ( ) + " %H%M" ;
211211 if let Ok ( parsed) = NaiveDateTime :: parse_from_str ( & ts, & f) {
212212 if let Ok ( dt) = naive_dt_to_fixed_offset ( date, parsed) {
213213 return Ok ( dt) ;
@@ -327,6 +327,23 @@ mod tests {
327327 }
328328 }
329329
330+ #[ cfg( test) ]
331+ mod formats {
332+ use crate :: parse_datetime;
333+ use chrono:: { DateTime , Local , TimeZone } ;
334+
335+ #[ test]
336+ fn single_digit_month_day ( ) {
337+ let x = Local . with_ymd_and_hms ( 1987 , 5 , 7 , 0 , 0 , 0 ) . unwrap ( ) ;
338+ let expected = DateTime :: fixed_offset ( & x) ;
339+
340+ assert_eq ! ( Ok ( expected) , parse_datetime( "1987-05-07" ) ) ;
341+ assert_eq ! ( Ok ( expected) , parse_datetime( "1987-5-07" ) ) ;
342+ assert_eq ! ( Ok ( expected) , parse_datetime( "1987-05-7" ) ) ;
343+ assert_eq ! ( Ok ( expected) , parse_datetime( "1987-5-7" ) ) ;
344+ }
345+ }
346+
330347 #[ cfg( test) ]
331348 mod offsets {
332349 use chrono:: Local ;
0 commit comments