@@ -204,10 +204,10 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
204
204
}
205
205
}
206
206
207
- let ts = s. as_ref ( ) . to_owned ( ) + "0000" ;
207
+ let ts = s. as_ref ( ) . to_owned ( ) + " 0000" ;
208
208
// Parse date only formats - assume midnight local timezone
209
209
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" ;
211
211
if let Ok ( parsed) = NaiveDateTime :: parse_from_str ( & ts, & f) {
212
212
if let Ok ( dt) = naive_dt_to_fixed_offset ( date, parsed) {
213
213
return Ok ( dt) ;
@@ -327,6 +327,23 @@ mod tests {
327
327
}
328
328
}
329
329
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
+
330
347
#[ cfg( test) ]
331
348
mod offsets {
332
349
use chrono:: Local ;
0 commit comments