1
 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 天。

我该如何解决这个问题?

4

1 回答 1

3

我们无法让 GetUtcOffset 处理历史日期。相反,我们使用了 Noda Time,它应该很简单:

var dt = Instant.FromUtc(1972, 03, 19, 02, 00, 00);
DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/London"];
Offset offset = zone.GetUtcOffset(dt);
于 2019-07-09T17:58:28.120 回答