如何比較日期
要比較兩個日期其實只要將兩個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()));
執行結果如下:
特別注意,使用上述方法,只會針對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()));
解決的方式必須先使用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));
【參考資料】