@@ -63,6 +63,10 @@ impl From<RegexError> for ParseDateTimeError {
63
63
mod format {
64
64
pub const ISO_8601 : & str = "%Y-%m-%d" ;
65
65
pub const ISO_8601_NO_SEP : & str = "%Y%m%d" ;
66
+ // US format for calendar date items:
67
+ // https://www.gnu.org/software/coreutils/manual/html_node/Calendar-date-items.html
68
+ pub const MMDDYYYY_SLASH : & str = "%m/%d/%Y" ;
69
+ pub const MMDDYY_SLASH : & str = "%m/%d/%y" ;
66
70
pub const POSIX_LOCALE : & str = "%a %b %e %H:%M:%S %Y" ;
67
71
pub const YYYYMMDDHHMM_DOT_SS : & str = "%Y%m%d%H%M.%S" ;
68
72
pub const YYYYMMDDHHMMSS : & str = "%Y-%m-%d %H:%M:%S.%f" ;
@@ -208,7 +212,12 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
208
212
209
213
let ts = s. as_ref ( ) . to_owned ( ) + " 0000" ;
210
214
// Parse date only formats - assume midnight local timezone
211
- for fmt in [ format:: ISO_8601 , format:: ISO_8601_NO_SEP ] {
215
+ for fmt in [
216
+ format:: ISO_8601 ,
217
+ format:: ISO_8601_NO_SEP ,
218
+ format:: MMDDYYYY_SLASH ,
219
+ format:: MMDDYY_SLASH ,
220
+ ] {
212
221
let f = fmt. to_owned ( ) + " %H%M" ;
213
222
if let Ok ( parsed) = NaiveDateTime :: parse_from_str ( & ts, & f) {
214
223
if let Ok ( dt) = naive_dt_to_fixed_offset ( date, parsed) {
@@ -339,7 +348,7 @@ mod tests {
339
348
}
340
349
341
350
#[ cfg( test) ]
342
- mod formats {
351
+ mod calendar_date_items {
343
352
use crate :: parse_datetime;
344
353
use chrono:: { DateTime , Local , TimeZone } ;
345
354
@@ -352,6 +361,10 @@ mod tests {
352
361
assert_eq ! ( Ok ( expected) , parse_datetime( "1987-5-07" ) ) ;
353
362
assert_eq ! ( Ok ( expected) , parse_datetime( "1987-05-7" ) ) ;
354
363
assert_eq ! ( Ok ( expected) , parse_datetime( "1987-5-7" ) ) ;
364
+ assert_eq ! ( Ok ( expected) , parse_datetime( "5/7/1987" ) ) ;
365
+ assert_eq ! ( Ok ( expected) , parse_datetime( "5/07/1987" ) ) ;
366
+ assert_eq ! ( Ok ( expected) , parse_datetime( "05/7/1987" ) ) ;
367
+ assert_eq ! ( Ok ( expected) , parse_datetime( "05/07/1987" ) ) ;
355
368
}
356
369
}
357
370
0 commit comments