不同于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,但我得到了相同的结果。

为什么这两个方法不能给出相同的结果?

不同于new DateTime()和DateTime. parse的结果

我想试试:

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问题的例子简单化。