1971年C#BST时区期间的差异(Windows与Linux)
我的系统设置为伦敦时间(GMT),区域设置设置为英国默认值 在Ubuntu 16.04、.NET Core 1.1上运行时,此代码生成以下内容:1971年C#BST时区期间的差异(Windows与Linux),c#,.net,linux,timezone,.net-core,C#,.net,Linux,Timezone,.net Core,我的系统设置为伦敦时间(GMT),区域设置设置为英国默认值 在Ubuntu 16.04、.NET Core 1.1上运行时,此代码生成以下内容: DateTime.Now: 27/01/2017 11:03:31 DateTime.UtcNow: 27/01/2017 11:03:31 new DateTime(1968, 02, 18).ToUniversalTime(): 18/02/1968 00:00:00 new DateTime(1968, 02, 19).ToUniversalT
DateTime.Now: 27/01/2017 11:03:31
DateTime.UtcNow: 27/01/2017 11:03:31
new DateTime(1968, 02, 18).ToUniversalTime(): 18/02/1968 00:00:00
new DateTime(1968, 02, 19).ToUniversalTime(): 18/02/1968 23:00:00
new DateTime(1971, 10, 31).ToUniversalTime(): 30/10/1971 23:00:00
new DateTime(1971, 11, 01).ToUniversalTime(): 01/11/1971 00:00:00
在Windows Server 2008 R2、.NET Core 1.1(以及.NET Framework 4.5.1)上运行这些表达式时,会生成:
DateTime.Now: 27/01/2017 10:55:47
DateTime.UtcNow: 27/01/2017 10:55:47
new DateTime(1968, 02, 18).ToUniversalTime(): 18/02/1968 00:00:00
new DateTime(1968, 02, 19).ToUniversalTime(): 19/02/1968 00:00:00
new DateTime(1971, 10, 31).ToUniversalTime(): 30/10/1971 23:00:00
new DateTime(1971, 11, 01).ToUniversalTime(): 01/11/1971 00:00:00
BST的变化似乎发生在1971年(而不是像Linux那样的1968年)——一个看似随意的日期
new DateTime(1971, 03, 28).ToUniversalTime(): 28/03/1971 00:00:00
new DateTime(1971, 03, 29).ToUniversalTime(): 28/03/1971 23:00:00
基于1968年和1971年(的实现)期间BST发生的情况,Linux在实际转换中似乎是正确的,而Windows似乎没有考虑到这一点,引入了一个不同的时期
这种行为的原因是什么?似乎是.NET内核或Windows BST表中的错误。由于Microsoft提供的历史数据表存在问题,NodaTime现在是否提供了自己的表?