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

如何将DateTimeOffset转换为指定时区的午夜时间

实现方案

实现逻辑分三步:

  • 先把传入的DateTimeOffset转换为目标时区对应的本地时间
  • 截断时间部分,得到目标时区当日零点的DateTime
  • 计算该零点在目标时区对应的UTC偏移,组装为最终的DateTimeOffset返回

完整扩展方法代码

public static DateTimeOffset AtMidnightInTimeZone(this DateTimeOffset date, TimeZoneInfo timeZone)
{
    // 转换为目标时区的时间
    DateTime targetZoneLocalTime = TimeZoneInfo.ConvertTime(date, timeZone);
    // 截断到当日零点
    DateTime targetZoneMidnight = targetZoneLocalTime.Date;
    // 获取该零点在目标时区的正确UTC偏移
    TimeSpan correctOffset = timeZone.GetUtcOffset(targetZoneMidnight);
    // 返回最终结果
    return new DateTimeOffset(targetZoneMidnight, correctOffset);
}

说明

上述代码可以直接通过你提供的单元测试,同时兼容夏令时切换等特殊时区场景:如果遇到目标时区当日不存在零点的极端情况(比如部分时区夏令时切换日,零点直接跳转为1点),TimeZoneInfo.GetUtcOffset会自动适配合法的时间偏移,无需额外处理异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:39:03