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毫秒,能相等吗,呵呵。
运行程序,结果如下:
我们查看Equals方法的定义,了解到方法定义如下:
Equals方法的定义还有另外两种形式,详情如下:
接着介绍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,很显然,两者值相等。
运行程序,结果如下:
代码片段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进行值相等(同样比较值)比较。结果和前面一致。如下图:
代码片段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();
代码运行结果:
此处,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();
结果如下:
代码片段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)方法还是有作用的。)
结果如下:
由结果可以看出,使用“==”操作符对时间类型数据进行时,得到的结果与使用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);
运行程序,得到:
通过结果,我们知道,这个默认值为“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();
运行结果:
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();
运行结果:
此处不做过多解释。
CompareTo方法也有两种形式,如下:
两者的关系与Equals方法中所用的说明类似,不再赘述。
好的,就到这里了。