在我的计算机上,运行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 Server2012UTC Standard Build9600,但是,相同的调用返回01.02.1990 23:00:00,这是相同的时刻,但在R2时区。服务器上的时区设置也是+3,定时匹配,日期匹配,所有我能想到的匹配。唯一的区别是我的机器上的时区是(+03:00) Moscow, St. Petersburg, Volgograd,而服务器上的时区是(UTC+03:00) Minsk
两个返回值都有Kind == DateTimeKind.Local
谁能解释一下造成这种行为的原因是什么?
发布于 2018-11-01 16:20:07
您应该使用支持偏移量的结构DateTimeOffset而不是DateTime。
var myDate = Convert.ChangeType("1990-02-02T00:00:00.000+0300", typeof(DateTimeOffset), CultureInfo.InvariantCulture);
DateTime utc = myDate.UtcDateTime; 这应该给出同样的时间。
原因可能是在1990年,时区是不同的。我不确定,但如果您尝试转换DateTime.Now(),它应该是相同的。
发布于 2018-11-01 16:49:58
问题是由于Daylight saving time,它存在于(UTC+03:00) Minsk (白俄罗斯),但不存在于(UTC+03:00) Moscow, St. Petersburg, Volgograd (俄罗斯)。
感谢大家花时间。
https://stackoverflow.com/questions/53097402
复制相似问题