From c9006f250fc13b482441abb1cdcbf9da50c7e470 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 13 May 2026 21:45:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E9=A1=B5=E7=89=88=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=94=B9=E4=B8=BA=E8=A7=82=E6=B5=8B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=B6=E9=97=B4=EF=BC=88=E5=9F=BA=E4=BA=8E=20create?= =?UTF-8?q?d=5Fat=EF=BC=89=EF=BC=8C=E4=B8=8D=E5=86=8D=E7=94=A8=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=9C=AC=E5=9C=B0=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- monitoring-web/src/main.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/monitoring-web/src/main.rs b/monitoring-web/src/main.rs index f6a756f9..157790df 100644 --- a/monitoring-web/src/main.rs +++ b/monitoring-web/src/main.rs @@ -57,14 +57,29 @@ struct MonitorTemplate { fn load_city_snapshot(db_path: &str, idx: usize, (key, _zh, en, icao, airport, tz, thresh, tz_abbr, rw_count): &(&str, &str, &str, &str, &str, i32, f64, &str, usize)) -> CitySnapshot { let now_utc = Utc::now(); - let local = now_utc + chrono::Duration::hours(*tz as i64); - let local_time = format!("{} {}", local.format("%H:%M"), tz_abbr); + let offset = chrono::FixedOffset::east_opt(*tz * 3600).unwrap(); // Recent obs for temp + trend let obs = db::get_recent_obs(db_path, icao, 120, 12); let temps: Vec = obs.iter().filter_map(|o| o.temp_c).collect(); let current_temp = temps.first().copied(); + // Observation time from the most recent record + let local_time = obs.first().and_then(|o| { + o.created_at.as_ref().and_then(|ts| { + chrono::NaiveDateTime::parse_from_str(ts, "%Y-%m-%d %H:%M:%S").ok() + }) + }) + .map(|dt| { + let obs_utc = dt.and_utc(); + let local = obs_utc.with_timezone(&offset); + format!("{} {}", local.format("%H:%M"), tz_abbr) + }) + .unwrap_or_else(|| { + let local = now_utc + chrono::Duration::hours(*tz as i64); + format!("{} {}", local.format("%H:%M"), tz_abbr) + }); + // Age of most recent observation let obs_age_min = obs.first().and_then(|o| { o.created_at.as_ref().and_then(|ts| {