command_vault/utils/
time.rs1use chrono::{DateTime, TimeZone, Utc, NaiveDate};
2
3pub fn parse_datetime(s: &str) -> Option<DateTime<Utc>> {
4 if let Ok(dt) = DateTime::parse_from_rfc3339(s) {
6 return Some(dt.with_timezone(&Utc));
7 }
8
9 let date_formats = [
11 "%Y-%m-%d",
12 "%Y/%m/%d",
13 "%d-%m-%Y",
14 "%d/%m/%Y",
15 ];
16
17 let datetime_formats = [
18 "%Y-%m-%d %H:%M",
19 "%Y-%m-%d %H:%M:%S",
20 "%Y-%m-%d %H:%M:%S UTC",
21 "%d/%m/%Y %H:%M",
22 "%d/%m/%Y %H:%M:%S",
23 ];
24
25 for format in date_formats {
27 if let Ok(naive_date) = NaiveDate::parse_from_str(s, format) {
28 let naive_datetime = naive_date.and_hms_opt(0, 0, 0).unwrap();
29 return Some(Utc.from_utc_datetime(&naive_datetime));
30 }
31 }
32
33 for format in datetime_formats {
35 if let Ok(naive) = chrono::NaiveDateTime::parse_from_str(s, format) {
36 return Some(Utc.from_utc_datetime(&naive));
37 }
38 }
39
40 None
41}