From 833b8253f98f2621c5c5d6abfca69c1de0723bc5 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Mon, 28 Sep 2026 03:05:50 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20instant=20=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=8C=96=E6=97=B6=E5=8C=BA=E9=80=89=E9=A1=B9=E5=85=88=E7=BB=8F?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96=E5=86=8D=E6=9F=A5=E5=81=8F=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/temporal/instant.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/oxide_builtins/src/temporal/instant.rs b/crates/oxide_builtins/src/temporal/instant.rs index f4a00026..3fb4e577 100644 --- a/crates/oxide_builtins/src/temporal/instant.rs +++ b/crates/oxide_builtins/src/temporal/instant.rs @@ -853,7 +853,11 @@ pub fn instant_to_string(vm: &mut H, args: &[u8]) -> NativeResult { return NativeResult::Err(crate::error::create_type_error(vm, "invalid time zone")); } let time_zone = to_string(time_zone_raw); - match zone_offset_seconds(&time_zone, epoch_ns.div_euclid(1_000_000_000) as i64) { + // 偏移查找只接受规范 ID,原始选项串先经规范化(datetime 串、"Z"、IANA 区名均在此接受)。 + let Some(time_zone_id) = canonical_time_zone(&time_zone) else { + return NativeResult::Err(crate::error::create_range_error(vm, "invalid time zone")); + }; + match zone_offset_seconds(&time_zone_id, epoch_ns.div_euclid(1_000_000_000) as i64) { Some(offset) => Some(offset), None => return NativeResult::Err(crate::error::create_range_error(vm, "invalid time zone")), }