Skip to content

Commit 0f5b6bf

Browse files
authored
Merge pull request #76 from RenjiSann/main
Fix single digit date parsing
2 parents 1389991 + 1bb93d7 commit 0f5b6bf

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/lib.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)