将DateTime转换为unix时间戳并再次返回 - 结果不相等

时间:2013-08-12 15:44:14

标签: c# datetime equality

我最近开始学习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

为什么这两个对象不一样?

我非常确定==上的DateTime测试应该比较值而不是参考值。

1 个答案:

答案 0 :(得分:2)

他们不一样。查看dateTime.TicksdateTimeConvertedBack.Ticks

这将有效:

DateTime dateTimeConvertedBack = ePoch.AddTicks(timeSpan.Ticks);