use chrono::{DateTime, Local, NaiveDate, NaiveTime, TimeZone, Utc};
pub fn parse_datetime(
date_str: &str,
time_str: &str,
) -> Result<DateTime<Utc>, Box<dyn std::error::Error + Send + Sync>> {
let date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d")
.map_err(|e| format!("日付のパースに失敗: {} ({})", date_str, e))?;
let time = NaiveTime::parse_from_str(time_str, "%H:%M")
.map_err(|e| format!("時刻のパースに失敗: {} ({})", time_str, e))?;
let naive_datetime = date.and_time(time);
let local_datetime = Local
.from_local_datetime(&naive_datetime)
.single()
.ok_or_else(|| {
format!(
"無効な日時: {} {} (夏時間の切り替え時刻の可能性があります)",
date_str, time_str
)
})?;
Ok(local_datetime.with_timezone(&Utc))
}