11

一段时间以来,我一直在寻找答案,但实际上我无处可寻。

我特别看这个页面。它说该CompareTo方法返回一个整数,指示它是更早、相同还是更晚。我理解它的用法,并且我理解在早期整数是负数,同样它是 0 等等。

但是这个整数是什么?它是否返回以秒、毫秒、滴答为单位的差异,或者根本没有返回差异?我希望你能帮我解决这个问题,如果有人能找到另一个关于这个问题的帖子,请告诉我。老实说,我很惊讶我不能马上找到关于这个话题的问题......

4

6 回答 6

21

该文档实际上在IComparable接口页面(DateTime 实现)中:http: //msdn.microsoft.com/en-us/library/system.icomparable.aspx

CompareTo(Object) 方法的实现必须返回具有三个值之一的 Int32,如下表所示。

小于零:当前实例在排序顺序中位于 CompareTo 方法指定的对象之前。

零:此当前实例与 CompareTo 方法指定的对象出现在排序顺序中的相同位置。

大于零:此当前实例在排序顺序中遵循 CompareTo 方法指定的对象。

于 2012-12-02T11:53:17.870 回答
17

根据 MSDN,没有指定任何内容:

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

如果你想比较 2 DateTimes 之间的天数,你应该寻找这样的东西:

if ((expiryDate - DateTime.Now).Days < 30)
于 2012-12-02T11:52:58.493 回答
2

这是一个您永远不需要知道并且可以随时更改的实现细节。仅有的 3 个类别是:

  • 消极的
  • 积极的

如果你发现自己使用了更多的东西,那么就有问题了。

于 2012-12-02T11:50:48.597 回答
0

据我所知,数字始终为 -1、0 或 1。

于 2012-12-02T11:51:00.277 回答
0

它是IComparable.CompareTo的实现。这意味着它将在相等时返回 0,如果较大则返回正整数,如果较小则返回负整数。

于 2012-12-02T11:51:18.997 回答
0

您可以选择特定的单位与 TimeSpan 进行比较

DateTime local_time = DateTime.Now; //current time

DateTime remote_time = DateTime.Now.AddMinutes(-2); //two minutes delayed

TimeSpan time_difference = (local_time - remote_time);

if (time_difference.Minutes <= 5) //compare specific units desired

{

bool within_tollerance = true;

}

于 2018-04-04T18:21:18.213 回答