From b0b1e2519ef7ac4a30591640730d661541c08b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sun, 4 Oct 2026 10:33:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3(=E6=97=A5=E5=8E=86)=EF=BC=9A?= =?UTF-8?q?=E6=B3=A8=E6=98=8E=20civil=5Ffrom=5Fdays=20=E7=9A=84=E5=90=88?= =?UTF-8?q?=E6=B3=95=E8=BE=93=E5=85=A5=E8=8C=83=E5=9B=B4=E4=B8=8E=E9=A5=B1?= =?UTF-8?q?=E5=92=8C=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 说明极端日序号会饱和并给出无意义日期,要求调用方保证输入范围 --- server-rs/crates/module-runtime/src/civil_calendar.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server-rs/crates/module-runtime/src/civil_calendar.rs b/server-rs/crates/module-runtime/src/civil_calendar.rs index 036bf1a2d..5b43da801 100644 --- a/server-rs/crates/module-runtime/src/civil_calendar.rs +++ b/server-rs/crates/module-runtime/src/civil_calendar.rs @@ -34,6 +34,10 @@ pub fn days_from_civil(year: i32, month: u8, day: u8) -> i64 { } /// 1970-01-01 起的日序号 → 公历年月日。 +/// +/// 只接受由 [`days_from_civil`] 产生、或落在公历可表示范围内的日序号(约 ±7.9e11 天,即 +/// `i32` 年份区间)。内部用 `saturating_add` 防止中间结果溢出:传入远小于/远大于该范围的 +/// 极端值时不会 panic,但会饱和并返回无意义的年月日,因此调用方需自行保证输入范围。 pub fn civil_from_days(date_key: i64) -> (i32, u8, u8) { // 中文注释:days_from_civil 的反向算法,避免依赖运行环境时区。 let z = date_key.saturating_add(719_468);