3

考虑这段代码:

var datetime = DateTime.Now;        
var instantMessage = InstantMassageingManager.GetConverationMessages().FirstOrDefault();
InstantMassageingManager.UpdateConversationMessageReadDateTime(instantMessage.InstantMessageInstanceId, datetime);
var message = InstantMassageingManager.GetMessageById(instantMessage.InstantMessageInstanceId);
Assert.IsTrue(message.ReadDateTime.Value == datetime);

在第一行我得到DateTime.Now

在此处输入图像描述

然后我更新数据库中的记录:UpdateConversationMessageReadDateTime

并再次从数据库中获取消息:

在此处输入图像描述

两者message.ReadDateTimedatetime具有相同的值但具有不同的 Tick。

所以我的测试没有通过。

为什么我得到不同的刻度值?

4

1 回答 1

7

我强烈怀疑您在数据库中使用的类型没有相同级别的精度 - 我怀疑它只能精确到毫秒。

如果你想往返时间,你也应该将你的“输入”时间截断到最接近的毫秒。例如:

TimeSpan rounded = TimeSpan.FromMilliseconds(original.Ticks / 10000);

或者对于一个DateTime

DateTime rounded = new DateTime(original.Year, original.Month, original.Day,
    original.Hour, original.Minute, original.Second, original.Millisecond,
    original.Kind);

您还应该考虑是否真的要采用本地时间(取决于系统时区)或 UTC 值。这取决于上下文,但更常见的是存储时间戳的 UTC 值,这就是您在这里所看到的。

于 2013-08-31T07:58:36.357 回答