2

私は最近 C# の学習を開始し、バグに遭遇しました。それを追跡したところ、DateTimeオブジェクトをタイムスタンプに変換してからオブジェクトに戻すとDateTime、結果DateTimeが元のものと等しくないことがわかりました。同一に見えます。

私が言いたいことを示すためにスニペットをまとめました

void Main()
{
    DateTime ePoch = new DateTime(1970, 1, 1, 0, 0, 0);

    DateTime dateTime = DateTime.UtcNow;
    TimeSpan timeSpan = (dateTime.ToUniversalTime() - ePoch);
    double unixTimeStamp = timeSpan.TotalSeconds;

    DateTime dateTimeConvertedBack = ePoch.AddSeconds(unixTimeStamp);

    System.Console.WriteLine(dateTime);
    System.Console.WriteLine(dateTimeConvertedBack);
    System.Console.WriteLine(dateTime.Millisecond);
    System.Console.WriteLine(dateTimeConvertedBack.Millisecond);
    System.Console.WriteLine(dateTime == dateTimeConvertedBack);  //results in false??
}

どちらが印刷されますか:

12/08/2013 15:43:56
12/08/2013 15:43:56
977
977
False

これら 2 つのオブジェクトが同等に扱われないのはなぜですか?

==テストでDateTimeは、参照ではなく値を比較する必要があると確信しています。

4

1 に答える 1

2

それらは同じではありません。と を見てdateTime.TicksくださいdateTimeConvertedBack.Ticks

これはうまくいきます:

DateTime dateTimeConvertedBack = ePoch.AddTicks(timeSpan.Ticks);
于 2013-08-12T15:50:38.363 に答える