私は最近 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
は、参照ではなく値を比較する必要があると確信しています。