From 68cd77a9b3ae4ede06161e622d07cf26041a46af Mon Sep 17 00:00:00 2001 From: ChristianVisintin Date: Sun, 27 Dec 2020 12:01:20 +0100 Subject: [PATCH] Added `utils::parser::parse_datetime` --- src/utils/parser.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/utils/parser.rs b/src/utils/parser.rs index 72b447f..a502024 100644 --- a/src/utils/parser.rs +++ b/src/utils/parser.rs @@ -181,6 +181,21 @@ pub fn parse_lstime(tm: &str, fmt_year: &str, fmt_hours: &str) -> Result Result { + match NaiveDateTime::parse_from_str(tm, fmt) { + Ok(dt) => { + let sys_time: SystemTime = SystemTime::UNIX_EPOCH; + Ok(sys_time + .checked_add(Duration::from_secs(dt.timestamp() as u64)) + .unwrap_or(SystemTime::UNIX_EPOCH)) + } + Err(err) => Err(err), + } +} + #[cfg(test)] mod tests { @@ -319,4 +334,19 @@ mod tests { assert!(parse_lstime("Feb 31 2018", "%b %d %Y", "%b %d %H:%M").is_err()); assert!(parse_lstime("Feb 15 25:32", "%b %d %Y", "%b %d %H:%M").is_err()); } + + #[test] + fn test_utils_parse_datetime() { + assert_eq!( + parse_datetime("04-08-14 03:09PM", "%d-%m-%y %I:%M%p") + .ok() + .unwrap() + .duration_since(SystemTime::UNIX_EPOCH) + .ok() + .unwrap(), + Duration::from_secs(1407164940) + ); + // Not enough argument for datetime + assert!(parse_datetime("04-08-14", "%d-%m-%y").is_err()); + } }