1 Equals 方法

返回一个值,该值指示两个 DateTime 对象,或者一个 DateTime实例和另一个对象或 DateTime是否具有相同的值。

下面通过实例代码来对Equals 方法的使用进行说明。

 

代码片段1



DateTime d1 = System.DateTime.Now;
Console.WriteLine("d1={0}", d1);
Thread.Sleep(1000);
DateTime d2 = System.DateTime.Now;
Console.WriteLine("d2={0}", d2);
Console.WriteLine("d1.Equals(d2)={0}", d1.Equals(d2));
Console.WriteLine();

d1与d2 保存系统当前时间,此处两者之间相差1000毫秒(原因呢?)。使用DateTime 对象的实例方法Equals对两者的值(记住:是比较两者的值!)进行比较,相等返回true,否则返回false。很显然,此处返回false,因为d1与d2的值相差1000毫秒,能相等吗,呵呵。

运行程序,结果如下:

date类型怎么比较 mysql datetime数据类型比较大小_date类型怎么比较 mysql



我们查看Equals方法的定义,了解到方法定义如下:

date类型怎么比较 mysql datetime数据类型比较大小_class_02

Equals方法的定义还有另外两种形式,详情如下:

date类型怎么比较 mysql datetime数据类型比较大小_date类型怎么比较 mysql_03

 

接着介绍Equals方法的应用。

 

代码片段2(接代码片段1)



DateTime d3 = d1;    
Console.WriteLine("d3 = d1={0}", d3);
Console.WriteLine("d1.Equals(d3)={0}", d1.Equals(d3));
Console.WriteLine();

将d1赋值给d3,很显然,两者值相等。

运行程序,结果如下:

date类型怎么比较 mysql datetime数据类型比较大小_class_04

 

代码片段3(接代码片段2)



Console.WriteLine("DateTime.Equals(d1, d2)={0}", DateTime.Equals(d1, d2));
Console.WriteLine("DateTime.Equals(d1, d3)={0}", DateTime.Equals(d1, d3));

此处使用静态方法Equals来对d1,d2,d3进行值相等(同样比较值)比较。结果和前面一致。如下图:

date类型怎么比较 mysql datetime数据类型比较大小_date类型怎么比较 mysql_05

 

代码片段4(接代码片段3)

很显然,下面得介绍最后一种Equals方法的使用了。

该方法重写 ValueType.Equals(Object)方法。

ValueType.Equals(Object)方法接收object入参。

ValueType.Equals(Object)方法返回:实例具有相同的类型并表示相同的值,则为 true;否则为 false。

此处与代码片段1介绍的Equals方法的异同点就不赘述了,很容易知晓。

上代码:



Console.WriteLine();
DateTime d100 = System.DateTime.Now.Date;
Console.WriteLine("d100={0}", d100);
string d200 = "2013/9/28 0:00:00";
Console.WriteLine("[string]d200={0}", d200);
Console.WriteLine("d100.Equals(d200)={0}", d100.Equals(d200));
Console.WriteLine();

代码运行结果:

date类型怎么比较 mysql datetime数据类型比较大小_equals_06

此处,d100 与d200 打印出的值完全一致,但是两者类型不一致,所以结果是false。

再次提醒:实例具有相同的类型表示相同的值才返回true。


代码片段5(接代码片段4)



DateTime d300 = System.DateTime.Now.Date;
Console.WriteLine("d300={0}", d300);
Console.WriteLine("d100.Equals(d300.ToString())={0}", d100.Equals(d300.ToString()));
Console.WriteLine("d100.Equals((object)d300)={0}", d100.Equals((object)d300));
Console.WriteLine();

结果如下:

date类型怎么比较 mysql datetime数据类型比较大小_class_07

代码片段5中,将DateTime类型的变量d300转换成字符串类型和object类型数据,再与d100进行相等比较。

很显然,将d300转换成字符串后与d100比较,结果为false,两者类型不一致。而转换成object类型再与d100比较时,值为true,那是因为比较时系统会将object类型的d300再次转换成DateTime类型,所以两者不光值相等,类型也相同,所以返回true。

最后,大家可能会问,那使用“==”操作符对时间类型数据进行时,得到的结果会与使用Equals方法的结果一致吗?

直接在前面的代码中插入(插入哦,

)如下代码:

Console.WriteLine("d1==d2={0}", d1 == d2);(插入代码片段1)
Console.WriteLine("d1==d3={0}", d1 == d3);(插入代码片段2)
Console.WriteLine("d1==d2={0}", d1 == d2);(插入代码片段3)
Console.WriteLine("d1==d3={0}", d1 == d3);(插入代码片段3)
Console.WriteLine("d100==d200={0}", d100 == d200);(插入代码片段4)
此处报错,很显然,字符串怎么能和时间进行比较呢,这点编译器都知道。(呵呵,调侃一下)
Console.WriteLine("d100==d300.ToString()={0}", d100 == d300.ToString());(插入代码片段5)
此处同样报错,原因同前。
Console.WriteLine("d100==(object)d300={0}", d100 == (object)d300);(插入代码片段5)
此处同样报错,提示:运算符“==”无法应用于“System.DateTime”和“object”类型的操作数。(看来ValueType.Equals(Object)方法还是有作用的。)

结果如下:

date类型怎么比较 mysql datetime数据类型比较大小_c#_08


 由结果可以看出,使用“==”操作符对时间类型数据进行时,得到的结果与使用Equals方法的结果一致(当然,前提是能使用“==”操作符得情况下)。

还有个问题,得探讨一下。我们知道,实例化一个DateTime类型的对象时,会默认给该对象一个值的。那我们在开发时,怎样判断该对象此时的值是初始化时的默认值还是重新赋过的值呢,方法如下:



DateTime day30 = new DateTime();
Console.WriteLine("day30={0}", day30);
bool comRes30 = day30.Equals(DateTime.MinValue);
Console.WriteLine("day30.Equals(DateTime.MinValue)={0}", comRes30);

运行程序,得到:

date类型怎么比较 mysql datetime数据类型比较大小_c#4.0_09

通过结果,我们知道,这个默认值为“0001/1/1 0:00:00”,该值与DateTime.MinValue值一致,所以只需与DateTime.MinValue比较即可。

 

下面介绍Compare方法的使用。


2.Compare方法

对两个 DateTime的实例进行比较,并返回一个指示第一个实例是早于、等于还是晚于第二个实例的整数。

下面通过实例代码来对Compare方法的使用进行说明。

 

代码片段1



DateTime day1 = System.DateTime.Now;
Console.WriteLine("day1={0}", day1);           
DateTime day2 = System.DateTime.Now;
Console.WriteLine("day2={0}", day2);
Thread.Sleep(1000);
DateTime day3 = System.DateTime.Now;
Console.WriteLine("day3={0}", day3);
Console.WriteLine("DateTime.Compare(day1,day2)={0}", DateTime.Compare(day1, day2));
Console.WriteLine("DateTime.Compare(day2,day1)={0}", DateTime.Compare(day2, day1));
Console.WriteLine("DateTime.Compare(day1,day3)={0}", DateTime.Compare(day1, day3));
Console.WriteLine("DateTime.Compare(day3,day1)={0}", DateTime.Compare(day3, day1));
Console.WriteLine();

运行结果:

date类型怎么比较 mysql datetime数据类型比较大小_date类型怎么比较 mysql_10

day1与day2值相等,day3值晚了1000ms。所以,day1与day2比较时,返回0;day1与day3比较时返回-1或者1。

代码片段2(接代码片段1)



DateTime day10 = System.DateTime.Now;
Console.WriteLine("day10={0}", day10);
Thread.Sleep(1000);
DateTime day20 = System.DateTime.Now;
Console.WriteLine("day20={0}", day20);
Console.WriteLine("day10.CompareTo(day20)={0}", day10.CompareTo(day20));
Console.WriteLine("day20.CompareTo(day10)={0}", day20.CompareTo(day10));
Console.WriteLine();

运行结果:

date类型怎么比较 mysql datetime数据类型比较大小_equals_11

此处不做过多解释。

 

CompareTo方法也有两种形式,如下:

date类型怎么比较 mysql datetime数据类型比较大小_c#4.0_12

两者的关系与Equals方法中所用的说明类似,不再赘述。

 

好的,就到这里了。