如何比較日期

如何比較日期

要比較兩個日期其實只要將兩個DateTime的變數相減,將回傳TimeSpan結構,就可以利用TimeSpan的屬性取得兩個日期純粹就天、小時、分鐘的差異,程式碼如下:

   1:  DateTime d1 = new DateTime(2011, 6, 24);
   2:  DateTime d2 = new DateTime(2011, 6, 23);
   3:  
   4:  Console.WriteLine(string.Format("{0}與{1}相差{2}天", d1.ToString("yyyy/MM/dd hh:mm:ss"), d2.ToString("yyyy/MM/dd hh:mm:ss"), (d1 - d2).Days.ToString()));
   5:  
   6:  d1 = new DateTime(2011, 6, 24, 1, 0, 0);
   7:  Console.WriteLine(string.Format("{0}與{1}相差{2}小時", d1.ToString("yyyy/MM/dd hh:mm:ss"), d2.ToString("yyyy/MM/dd hh:mm:ss"), (d1 - d2).Hours.ToString()));
   8:  
   9:  d1 = new DateTime(2011, 6, 24, 1, 10, 0);
  10:  Console.WriteLine(string.Format("{0}與{1}相差{2}分鐘", d1.ToString("yyyy/MM/dd hh:mm:ss"), d2.ToString("yyyy/MM/dd hh:mm:ss"), (d1 - d2).Minutes.ToString()));

執行結果如下:

image

 

特別注意,使用上述方法,只會針對TimeSpan結構的屬性進行比較,以下列程式碼範例而言,d1為2011/06/24 01:00:00,d2為2011/06/23 12:00:00,就一般的認知d1應該是大於d2有25小時,但是得到的結果卻是1小時。

   1:   DateTime d1 = new DateTime(2011, 6, 24, 1, 0, 0);
   2:   DateTime d2 = new DateTime(2011, 6, 23);
   3:   Console.WriteLine(string.Format("{0}與{1}相差{2}小時", d1.ToString("yyyy/MM/dd hh:mm:ss"), d2.ToString("yyyy/MM/dd hh:mm:ss"), (d1 - d2).Hours.ToString()));

image

解決的方式必須先使用Duration方法得到兩個日期的實際差異,在各透過Days、Hours等屬性取得詳細差異時間,程式碼如下:

   1:  DateTime d1 = new DateTime(2011, 6, 24, 1, 10, 20);
   2:  DateTime d2 = new DateTime(2011, 6, 23);
   3:  Console.WriteLine(string.Format("{0}與{1}相差{2}小時", d1.ToString("yyyy/MM/dd hh:mm:ss"), d2.ToString("yyyy/MM/dd hh:mm:ss"), (d1 - d2).Hours.ToString()));
   4:  TimeSpan t =(d1 - d2).Duration();
   5:  Console.WriteLine(string.Format("{0}與{1}相差{2}天{3}時{4}分{5}秒", d1,d2,t.Days, t.Hours, t.Minutes, t.Seconds));

image

 

【參考資料】