var FinalValue = TimeZoneInfo.ConvertTime(x, timeZoneInfo).ToString(format);
当将 ConvertTime 方法应用于我的 'x' 日期(UTC 到萨摩亚标准时间)时,它错误地应用了 +14 小时,而不是 timeZoneInfo 中的 BaseUtcOffset 上显示的 +13 小时,我的 'finalValue' var应匹配 03:14:39 而不是 04:14:39,但此方法对于其他时区可以正常工作
最佳答案
这确实似乎是一个错误,因为 Windows 注册表中缺少与 2021 年萨摩亚 DST 规则更改相关的数据。
https://www.timeanddate.com/news/time/samoa-removes-dst.html
这是在 IANA 2021b 中实现的,但微软似乎错过了这一点。它不在 Microsoft DST blog 上.
更清晰的再现:
var dto1 = DateTimeOffset.Parse("2022-01-01T00:00:00Z");
Console.WriteLine(dto1.ToString("o"));
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Samoa Standard Time");
var dto2 = TimeZoneInfo.ConvertTime(dto1, tz);
Console.WriteLine(dto2.ToString("o"));
输出:
2022-01-01T00:00:00.0000000+00:00
2022-01-01T14:00:00.0000000+14:00
(最后一个应该是 2022-01-01T13:00:00.0000000+13:00
。)
相关的 Windows 注册表项是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time\Dynamic DST
在我的(完全更新的 Win 11 22H2)机器上显示:
2012 年的条目适用于所有年份。应该有一个关于 2021 年结束 DST 但不重新启动 DST 的新条目,以及另一个根本没有 DST 的 2022 年条目。
我会将此事报告给 Microsoft。谢谢!
关于c# - .Net TimezoneInfo.ConvertTime UTC 日期到萨摩亚返回的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75686035/