c# - 在我们的 C# DateTime 类型中,是什么导致了这种行为?

标签 c#

[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() 等幕后发生了什么导致了这种行为。

看到乔恩的回答后编辑:

[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' 的结果相同。我正在阅读文档,但仍然不清楚。

最佳答案

看看 dateTime.ToString() 产生的结果 - 它通常只精确到秒,尽管它取决于文化设置。如果 ToString() 只给出精确到秒的结果,那么解析字符串就无法提供更多信息...

您可以使用“o”standard format string提供可往返的字符串表示。例如,目前它产生如下内容:

2011-10-31T06:28:34.6425574Z

编辑:您需要使用相同的说明符进行解析以获得相同的结果:

string text = dateTime.ToString("o");
// Culture is irrelevant when using the "o" specifier
DateTime parsed = DateTime.ParseExact(text, "o", null,
                                      DateTimeStyles.RoundtripKind);

关于c# - 在我们的 C# DateTime 类型中,是什么导致了这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950502/

相关文章:

c# - 如何使用 C# 查找 MS Access 数据库中不同记录的计数?

c# - 压缩 MP4 文件

c# - 如何在 ItemsControl 中设置从 ItemTemplate 到托管容器的绑定(bind)? (UWP)

c# - 光线追踪器光线反射错误

c# - 不包含 的定义,也找不到接受类型的第一个参数的扩展方法

c# - 如何将导弹图像拉到线上?

c# - 如果收到新请求,如何取消以前的任务?

c# - 连接视频+视频[+音频]的FFMPEG问题

c# - 调试程序集加载问题

c# - 在 C# 中将一组成员标记为私有(private)/公共(public)