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

如何获取非本地时区夏令时信息并转换对应夏令时时区?

解决方案

你需要针对用户指定的时区而非本地时区来判断夏令时状态,以下是修正后的代码及关键说明:

修正后的代码

protected DateTime ConvertTimeZoneFromUTC(DateTime dateTime)
{
    // 确保输入为UTC时间
    var dateUtc = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
    
    // 获取用户指定的时区对象(避免重复调用FindSystemTimeZoneById)
    var userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(WindowsTimeZoneName);
    
    // 直接转换UTC时间到用户时区,方法会自动处理夏令时偏移
    var convertedTime = TimeZoneInfo.ConvertTimeFromUtc(dateUtc, userTimeZone);
    
    // 获取当前对应的时区名称(夏令时或标准时间)
    string currentTimeZoneName;
    if (userTimeZone.SupportsDaylightSavingTime && userTimeZone.IsDaylightSavingTime(convertedTime))
    {
        currentTimeZoneName = userTimeZone.DaylightName; // 例如"US Mountain Daylight Time"
    }
    else
    {
        currentTimeZoneName = userTimeZone.StandardName; // 例如"US Mountain Standard Time"
    }

    // 注意:无需再次调用ConvertTimeFromUtc,因为convertedTime已经是正确的时间
    // 如果仅需获取时区名称,使用currentTimeZoneName即可;如果需要返回转换后的时间,直接返回convertedTime
    return convertedTime;
}

关键修正点

  • 替换本地时区为用户时区:使用userTimeZone.IsDaylightSavingTime()而非TimeZoneInfo.Local的方法,确保判断逻辑完全针对用户指定的时区。
  • 避免重复转换:TimeZoneInfo.ConvertTimeFromUtc会自动根据时区的夏令时规则调整时间偏移,无需单独使用夏令时ID重新转换(Windows时区的标准名和夏令时名称指向同一个时区对象,转换结果一致)。
  • 兼容无夏令时时区:先检查userTimeZone.SupportsDaylightSavingTime,避免对本身不支持夏令时的时区做无效判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:03:22