c# - .Net TimezoneInfo.ConvertTime UTC 日期到萨摩亚返回的值不正确

标签 c# .net datetime timezone

var FinalValue = TimeZoneInfo.ConvertTime(x, timeZoneInfo).ToString(format); enter image description here enter image description here enter image description here enter image description here

当将 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)机器上显示:

screenshot of registry editor

2012 年的条目适用于所有年份。应该有一个关于 2021 年结束 DST 但不重新启动 DST 的新条目,以及另一个根本没有 DST 的 2022 年条目。

我会将此事报告给 Microsoft。谢谢!

关于c# - .Net TimezoneInfo.ConvertTime UTC 日期到萨摩亚返回的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75686035/

相关文章:

c# - 如何将内容放入 docx 的合并字段中

javascript - 如何将日期转换为正常格式,如 "2017-03-03 09:46:22.103"?

javascript - 使用 JavaScript 获取当前日期/时间

c# - 如何修改 WebCamTexture 的大小?

c# - 在此 C# 代码中,符号 "=>"在我的方法之后做什么?

c# - VSIX 中令人讨厌的 COM 互操作问题

c# - 如何在我的 .NET 应用程序中使用功能区?

c# - 在多个类之间共享变量

.net - 如何解决 Failed to add reference to 'Microsoft.WITDataStore' ?

c# - 绝对最小日期