You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net中TimeZoneInfo.ConvertTime转换UTC到萨摩亚时区返回错误值求助

问题描述

使用以下代码将UTC时间x转换为萨摩亚标准时间时:

var finalValue = TimeZoneInfo.ConvertTime(x, timeZoneInfo).ToString(format);

实际得到的结果偏移了14小时(显示为04:14:39),但timeZoneInfo.BaseUtcOffset显示的基础偏移是13小时,预期结果应为03:14:39,且该方法在其他时区转换正常。

原因分析

萨摩亚标准时间(Samoa Standard Time)的时区规则包含夏令时调整:

  • 基础偏移(BaseUtcOffset)为UTC+13(标准时间)
  • 夏令时生效时,偏移会调整为UTC+14
    TimeZoneInfo.ConvertTime方法会自动检测目标时间是否处于夏令时时段,并应用对应的实际偏移,而非仅使用BaseUtcOffset的基础值。你转换的时间刚好处于萨摩亚的夏令时生效区间内,因此得到了UTC+14的偏移结果。
解决方法

如果你的需求是强制使用萨摩亚的标准时间(不考虑夏令时),而非当前生效的时区时间,可以直接基于基础偏移手动计算:

// 直接添加基础偏移,忽略夏令时
var standardTime = x.Add(timeZoneInfo.BaseUtcOffset);
var finalValue = standardTime.ToString(format);

如果需要确认夏令时是否生效,可以通过以下代码判断:

bool isDaylightSaving = timeZoneInfo.IsDaylightSavingTime(x);

内容的提问来源于stack exchange,提问作者Tiago Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:50:13