Convert.ChangeType到DateTime在不同的计算机上返回不同的结果

时间:2018-11-01 08:14:45

标签: c# .net

在运行Microsoft Windows 10 Pro Build 17134的计算机上,调用

Convert.ChangeType("1990-02-02T00:00:00.000+0300", typeof(DateTime), CultureInfo.InvariantCulture);

返回02.02.1990 0:00:00。时区设置为+3。

尽管在运行Microsoft Windows Server 2012 R2 Standard Build 9600的服务器上,相同的调用返回01.02.1990 23:00:00,这是同一时间,但采用UTC时区。服务器上的时区设置也为+3,定时匹配,日期匹配以及所有我能想到的匹配。唯一的区别是在我的计算机上的时区是(+03:00) Moscow, St. Petersburg, Volgograd,在服务器上是(UTC+03:00) Minsk

两个返回的值都有Kind == DateTimeKind.Local

有人可以解释这种行为的原因吗?

2 个答案:

答案 0 :(得分:0)

您应该使用偏移感知结构DateTimeOffset而不是DateTime

var myDate = Convert.ChangeType("1990-02-02T00:00:00.000+0300", typeof(DateTimeOffset), CultureInfo.InvariantCulture);
DateTime utc = myDate.UtcDateTime; 

这应该给相同的时间。

原因可能是1990年的时区不同。我不确定,但是如果您尝试转换DateTime.Now(),它应该是相同的。

答案 1 :(得分:0)

此问题是由于Daylight saving time(存在于(UTC+03:00) Minsk(白俄罗斯)中而不是(UTC+03:00) Moscow, St. Petersburg, Volgograd(俄罗斯)中引起的。

感谢大家度过的时间。