email/email/date.rs
1use chrono::{FixedOffset, TimeZone};
2
3pub fn from_mail_parser_to_chrono_datetime(
4 dt: &mail_parser::DateTime,
5) -> Option<chrono::DateTime<FixedOffset>> {
6 let tz_secs = (dt.tz_hour as i32) * 3600 + (dt.tz_minute as i32) * 60;
7 let tz_sign = if dt.tz_before_gmt { -1 } else { 1 };
8
9 FixedOffset::east_opt(tz_sign * tz_secs)?
10 .with_ymd_and_hms(
11 dt.year as i32,
12 dt.month as u32,
13 dt.day as u32,
14 dt.hour as u32,
15 dt.minute as u32,
16 dt.second as u32,
17 )
18 .earliest()
19}