为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 TimeZoneInfo 类与夏令时一起使用以转换为 UTC

如何将 TimeZoneInfo 类与夏令时一起使用以转换为 UTC

C#
慕后森 2022-11-21 16:23:13
我正在使用 TimeZoneInfo 类将 Datetime 值转换为 UTC。但是,转换不会自动处理夏令时。我怎样才能做到这一点。例如,我正在尝试将以下 DateTime 转换为 UTC://meetingDate is "10/04/2019 12:00:00" PMvar timeZoneId="AUS Eastern Standard Time";DateTime dtUTC = TimeZoneInfo.ConvertTime(meetingDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId), TimeZoneInfo.Utc);返回值为:10/04/2019 02:00:00 UTC(上午)这是因为我的操作系统中“澳大利亚东部标准时间”的时区是 UTC + 10:00(见下图)但是因为启用了“自动调整夏令时”设置,我能够看到我的 Windows 10 上的正确时间(实际上是在这个特定时刻(2019 年 4 月 1 日)UTC + 11)我如何使用 TimeZoneInfo.ConvertTime 方法获得相同的行为。如果我传递值“10/04/2019 12:00:00 PM”,我应该返回:10/04/2019 01:00:00 am UTCPS:我已经检查了以下堆栈溢出问题,但它是从 UTC 转换而来的,因此它不适用于我的问题。如何在夏令时期间使用 TimeZoneInfo 获取本地时间?图片 Windows 10 时区:
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

该代码已经在做正确的事情并针对夏令时进行了调整。“AUS 东部标准时间”是 IANA 澳大利亚/悉尼区域的 Windows 等效时间。澳大利亚/悉尼的过渡显示在我的 Noda Time 网站中,它们表明 UTC 时间 4 月 6 日下午 4 点(当地时间 4 月 7 日凌晨 3 点)从 UTC+11 到 UTC+10 有一个过渡。

这意味着到 4 月 10 日——您要求转换的当地时间日期——偏移量确实是 UTC+10,而 10/04/2019 02:00:00 UTC (am) 是正确的结果。如果它给出的结果是凌晨 1 点(因此减去 +11 的 UTC 偏移量)那将是不正确的,因为它不会从 4 月 6 日的夏令时过渡开始进行调整。


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信