我发现我正在处理的一个应用程序存在一个错误,该错误将日期时间错误地存储在我们的数据库中。我将其追溯到DateTime.FromBinary的操作方式之间存在一些不一致之处。
我将此代码用作测试用例:
var dateTime = DateTime.FromBinary(-8587689004854775808);
string toString = dateTime.ToString();
在Windows PC(.NET 4.5,控制台应用程序)和iOS应用程序(Xamarin.iOS 8.10.0.267)上,我得到以下结果:
5/27/2015 12:00:00 AM
但是,在我们的azure服务器上,它是在同一日期,但上午6:00出来的。
作为快速测试,我启动了DotNetFiddle:
https://dotnetfiddle.net/ziBwfA
果然有输出:
5/27/2015 6:00:00 AM
请注意,我还输出了“种类”属性,它以“本地”形式返回,因此我认为这不是本地vs.utc问题。
关于为什么会发生这种情况的任何想法?
您可能正在DateTime
一个时区中的一台机器上序列化该机器,然后在另一个时区中的一台机器上反序列化它。这在MSDN上有详细记录:
在某些情况下,该方法
DateTime
返回的值FromBinary
与DateTime
提供给该ToBinary
方法的原始值不同。有关更多信息,请参见下一节“本地时间调整”。
然后继续解释:
如果
DateTime
通过该ToBinary
方法将本地对象在一个时区中序列化,然后通过该方法在另一个时区中反序列化,FromBinary
则由所得DateTime
对象表示的本地时间将自动调整为第二时区。
这似乎很符合您所看到的行为。
您可能需要考虑将日期存储在UTC中(可能有偏移量,具体取决于您的应用程序)。有关存储日期和时间的最佳做法,请参见此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句