2011-07-07 153 views
2

目标 - 找出哪个DateTime更近。比较DateTime对象

我可以算出来,此代码:

DateTime dt1 = new DateTime(...); //let's say it was created on 1/1/2000 

DateTime dt2 = new DateTime(...); //let's say it was create on 1/1/2011 

if (dt2.ToBinary() > dt1.ToBinary()) { 
print dt2 is newer than dt1 } 

我可以简单地将datetime对象转换为二进制,然后假定较大的一个是更近?

感谢, 凯文

回答

8
if (dt2 > dt1) { 
print dt2 is newer than dt1 } 

应该足以作为的DateTime重载比较运算符。

4

通常可以做得更好:

if (dt2 > dt1) 

棘手位被抽空区考虑...你可以潜在地使用

if (dt2.ToUniversalTime() > dt1.ToUniversalTime()) 

但前提是你知道任何“本地”时间确实在系统时区内是本地的。

日期和时间在.NET是有点乱:(的

3

不,你不能。ToBinary()返回内部。格式也存储时区信息

相反,你可以比较DateTime小号直接:

if (dt2 > dt1) 

DateTime重载比较运算符。

你可以比较Ticks属性,但你不应该打扰。

0

DateTime对象是可比性自己,所以

if (dt1>dt2) 
    Console.WriteLine('dt1 is newer'); 
else if (dt1>dt2) 
    Console.WriteLine('dt2 is newer'); 
else // they are equal 
    Console.WriteLine('dt1 and dt2 are the same'); 

也能工作。
此外DateTime实现IComparable<DateTime>接口,所以你可以做:

int result = dt1.CompareTo(dt2); 
if (result > 0) 
    Console.WriteLine('dt1 is newer'); 
else if (result < 0) 
    Console.WriteLine('dt2 is newer'); 
else // result = 0 
    Console.WriteLine('dt1 and dt2 are the same'); 

编辑:这忽略了时区,本地时间,等...

1

您可以使用Datetime.Compare

int iDiff = DateTime.Compare(new DateTime(2011, 02, 28), new DateTime(2011, 01, 30)); 

-1 = Fisrt日期小于第二个
0 =第一个日期等于第二个
1 =第一个日期大于第二个日期