当尝试获取过去日期的偏移信息时,TimeZoneInfo 仅在 Windows 中返回错误信息。 以下 .NET 代码重现了该问题:
let dt = DateTimeOffset.Parse("1904-05-11T08:45:30Z")
let timeZone = TimeZoneInfo.FindSystemTimeZoneById("Europe/Madrid")
timeZone.GetUtcOffset(dt).Hours //Should be 0, but return 2 on Windows.
我的假设是windows中的时区数据没有更新,但是我没有找到任何手动更新的方法。
存在两个主要时区数据库:
它们不共享相同的时区名称,也不共享相同的数据。 尽管可以通过一些临时映射将时区名称从一个时区名称转换为另一个时区名称。 这样的翻译总体来说还不错,但并不是100%准确。 1970 年之前的日期的准确性往往会急剧下降。
.NET 使用 Windows 时区数据库。 该数据库对您的时间和地点有 2 小时的偏移。
Mac/Linux 使用 IANA 时区数据库。 该数据库对于您的时间和地点有 0 小时的偏移量。