lab_resource_manager/interface/slack/utility/
datetime_parser.rs1use chrono::{DateTime, Local, NaiveDate, NaiveTime, TimeZone, Utc};
4
5pub fn parse_datetime(
18 date_str: &str,
19 time_str: &str,
20) -> Result<DateTime<Utc>, Box<dyn std::error::Error + Send + Sync>> {
21 let date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d")
23 .map_err(|e| format!("日付のパースに失敗: {} ({})", date_str, e))?;
24
25 let time = NaiveTime::parse_from_str(time_str, "%H:%M")
27 .map_err(|e| format!("時刻のパースに失敗: {} ({})", time_str, e))?;
28
29 let naive_datetime = date.and_time(time);
31
32 let local_datetime = Local
34 .from_local_datetime(&naive_datetime)
35 .single()
36 .ok_or_else(|| {
37 format!(
38 "無効な日時: {} {} (夏時間の切り替え時刻の可能性があります)",
39 date_str, time_str
40 )
41 })?;
42
43 Ok(local_datetime.with_timezone(&Utc))
44}