修复(计费): 公历反算避免 i64 溢出
civil_from_days 用 saturating_add 计算日序号偏移,消除 date_key 接近 i64::MAX 时的加法溢出 Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -36,7 +36,7 @@ pub fn days_from_civil(year: i32, month: u8, day: u8) -> i64 {
|
||||
/// 1970-01-01 起的日序号 → 公历年月日。
|
||||
pub fn civil_from_days(date_key: i64) -> (i32, u8, u8) {
|
||||
// 中文注释:days_from_civil 的反向算法,避免依赖运行环境时区。
|
||||
let z = date_key + 719_468;
|
||||
let z = date_key.saturating_add(719_468);
|
||||
let era = z.div_euclid(146_097);
|
||||
let day_of_era = z - era * 146_097;
|
||||
let year_of_era = (day_of_era - day_of_era / 1_460 + day_of_era / 36_524
|
||||
|
||||
Reference in New Issue
Block a user