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

本文关键字:返回 结果 不相等 转换 DateTime unix 时间戳 | 更新日期: 2023-09-27 18:27:33

我最近开始学习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上的==测试应该比较值,而不是参考值。

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

它们不一样。看看dateTime.TicksdateTimeConvertedBack.Ticks

这将起作用:

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