在我们的C#DateTime类型中导致此行为的原因是什么?

[Test]
public void Sadness()
{
   var dateTime = DateTime.UtcNow;
   Assert.That(dateTime, Is.EqualTo(DateTime.Parse(dateTime.ToString())));
}

失败:

 Expected: 2011-10-31 06:12:44.000
 But was:  2011-10-31 06:12:44.350

我想知道在ToString()等幕后发生的事情导致这种行为.

编辑看完Jon的答案后:

[Test]
public void NewSadness()
{
    var dateTime = DateTime.UtcNow;
    Assert.That(dateTime, Is.EqualTo(DateTime.Parse(dateTime.ToString("o"))));
}

结果:

Expected: 2011-10-31 12:03:04.161
But was:  2011-10-31 06:33:04.161

与资本和小’o’相同的结果.我正在阅读文档,但仍不清楚.

最佳答案
默认格式说明符是“G” – 通用格式 – 具有有限的保真度.如果要重现完全相同的事物,请使用往返说明符“O”.

string s = dateTime.ToString("O", CultureInfo.InvariantCulture);
Assert.That(dateTime, Is.EqualTo(DateTime.ParseExact(
       s, "O", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)));

转载注明原文:在我们的C#DateTime类型中导致此行为的原因是什么? - 代码日志