Rob*_*ves 5 .net c# 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).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
Run Code Online (Sandbox Code Playgroud)
这些表达式在 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
根据 1968 年和 1971 年 BST(英国标准时间的实现)发生的情况,Linux 的实际转换似乎是正确的,而 Windows 似乎没有考虑到这一点并引入了不同的时期。
这种行为的原因是什么?