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.ReadDateTimeとのdatetime値は同じですが、Tick が異なります。

だから私のテストは合格しません。

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 に答える