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

C# 将DateTime转换为unix时间戳并再次转换-结果不相等,c#,datetime,equality,C#,Datetime,Equality,我最近开始学习C#并遇到了一个bug,我追踪并发现这是因为如果我将DateTime对象转换为时间戳,然后返回到DateTime对象,得到的DateTime与原始对象不相等,即使在我看来它们是相同的 我整理了一个片段来展示我的意思 void Main() { DateTime ePoch = new DateTime(1970, 1, 1, 0, 0, 0); DateTime dateTime = DateTime.UtcNow; TimeSpan timeSpan =

我最近开始学习C#并遇到了一个bug,我追踪并发现这是因为如果我将
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.Ticks
dateTimeConvertedBack.Ticks

这将有助于:

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

啊,我不确定实际比较的值是多少。我不知道
滴答声
字段。我怎么能把它转换成一个时间戳,然后再转换回来,这样它就比较相等了?啊,谢谢(+1)
timeSpan.Ticks
不是unix时间戳,但@GP89 Ticks是基本的计时方法,其精度高于“秒”。您添加的秒数由许多个刻度组成,这导致两个
DateTime
对象不完全相等。我使用的时间戳以秒为单位,但它是
double
但我猜
double
没有足够的精度来表示单个刻度。