2011-07-07 183 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 =第一個日期大於第二個日期