不同于new DateTime()和DateTime. parse的结果
本文关键字:DateTime parse 结果 new 不同于 | 更新日期: 2023-09-27 18:14:25
我在c#的单元测试中注意到一些奇怪的行为。
给定以下代码:
var dateTime = DateTime.Parse("01/01/2015");
Assert.AreEqual(dateTime, new DateTime(2015, 1, 1));
我得到一个失败的测试结果:
Expected: 2015-01-01 00:00:00.000
But was: 01/01/2015 00:00:00 +00:00
我试过在两者上调用ToString()
,传递CultureInfo.CurrentCulture
并在新的DateTime调用上设置DateKind到本地和UTC,但我得到了相同的结果。
为什么这两个方法不能给出相同的结果?
我想试试:
Assert.IsTrue(DateTime.Compare(DateTime.Parse("01/01/2015"), new DateTime(2015, 1, 1) == 0);
永远不要将日期硬编码为字符串。这么做有什么意义?
DateTime.Parse("01/01/2015")
改为:
new DateTime(2015,1,1)
DateTime。默认情况下,Parse使用当前区域性来创建日期。考虑下面的例子:
DateTime.Parse("09/06/2015");
是6月9日还是9月6日?根据您的机器文化,您将得到不同的结果。如果你的DateTime字符串来自某个地方,那么你可以强制Parse方法使用特定的格式/文化。
回到这个问题,这可能与文化有关。
在简化的示例中,问题假设第一个变量是DateTime,而它实际上是DateTimeOffset。生成该变量的使用的公共方法已经更改,并且我错误地假定返回类型仍然是DateTime。
所以它们给出不同结果的原因是因为它们是不同的!
第一课:检查类型,即使你知道它们是什么。第二课:不要把SO问题的例子简单化。