在运行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
有人可以解释这种行为的原因吗?
答案 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
(俄罗斯)中引起的。
感谢大家度过的时间。