Merge pull request #117 from jfinkels/add-time-to-date-after-parsing

Add time to parsed date after parsing not before
This commit is contained in:
Daniel Hofstetter
2025-02-14 10:10:14 +01:00
committed by GitHub
+14 -11
View File
@@ -21,8 +21,8 @@ mod parse_time_only_str;
mod parse_weekday;
use chrono::{
DateTime, Datelike, Duration, FixedOffset, Local, LocalResult, MappedLocalTime, NaiveDateTime,
TimeZone, Timelike,
DateTime, Datelike, Duration, FixedOffset, Local, LocalResult, MappedLocalTime, NaiveDate,
NaiveDateTime, TimeZone, Timelike,
};
use parse_relative_time::parse_relative_time_at_date;
@@ -297,13 +297,12 @@ pub fn parse_datetime_at_date<S: AsRef<str> + Clone>(
}
}
let ts = s.as_ref().to_owned() + " 0000";
// Parse date only formats - assume midnight local timezone
for (fmt, n) in format::PATTERNS_DATE_NO_TZ {
if ts.len() >= n + 5 {
let f = fmt.to_owned() + " %H%M";
if let Ok(parsed) = NaiveDateTime::parse_from_str(&ts[0..n + 5], &f) {
if let Ok(dt) = naive_dt_to_fixed_offset(date, parsed) {
if s.as_ref().len() >= n {
if let Ok(parsed) = NaiveDate::parse_from_str(&s.as_ref()[0..n], fmt) {
let datetime = parsed.and_hms_opt(0, 0, 0).unwrap();
if let Ok(dt) = naive_dt_to_fixed_offset(date, datetime) {
return Ok(dt);
}
}
@@ -663,10 +662,14 @@ mod tests {
assert!(crate::parse_datetime("bogus +1 day").is_err());
}
#[test]
fn test_parse_invalid_delta() {
assert!(crate::parse_datetime("1997-01-01 bogus").is_err());
}
// TODO Re-enable this when we parse the absolute datetime and the
// time delta separately, see
// <https://github.com/uutils/parse_datetime/issues/104>.
//
// #[test]
// fn test_parse_invalid_delta() {
// assert!(crate::parse_datetime("1997-01-01 bogus").is_err());
// }
#[test]
fn test_parse_datetime_tz_nodelta() {