GetUtcOffset返回某些年份/日期的错误偏移量

时间:2019-07-09 10:28:30

标签: c# datetime timezone-offset defaultmodelbinder

 var currentServerOffset = TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime(1972, 03, 19, 02, 00, 00);

使用上述方法返回错误的偏移量,但是当您经过3月26日时,它会得到纠正。

这似乎已经整整一周了,在我的测试中,这是在1972年和1973年,参考:https://greenwichmeantime.com/info/calendars/bst-dates/

我认为这可能与近年来的GetDaylightChanges错误有关,参考:https://docs.microsoft.com/en-us/dotnet/api/system.timezone.getdaylightchanges?view=netframework-4.8#remarks

就像我在1972或1973年所说的那样,开始是在7天前结束的。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

我们无法使GetUtcOffset与历史日期一起使用。相反,我们使用了Noda Time,它应该像这样简单:

var dt = Instant.FromUtc(1972, 03, 19, 02, 00, 00);
DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/London"];
Offset offset = zone.GetUtcOffset(dt);