The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

C# 如何取得兩個 DateTime 日期之間的天數

在 .NET 中並沒有「直覺」的方法取得兩個 DateTime 物件之間的差異天數、月數,以致於不熟的人卻會花不少時間在找這些方法。

取得兩個日期之間的「天數」(不足一天者採「無條件刪去法」) 

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).Days

[/code]

取得兩個日期之間的「天數」(回傳型別為 double 雙精確度)

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalDays

[/code]

取得兩個日期之間的「小時數」(回傳型別為 double 雙精確度)

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalHours

[/code]

取得兩個日期之間的「分鐘數」(回傳型別為 double 雙精確度) 

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalMinutes

[/code]

備註事項

TimeSpan 成員中,只要是 Total 開頭的屬性,都是回傳兩個時間差的「總天數」、「總時數」、「總分鐘數」、「總秒數」、「總豪秒數」,而且以 double 型別回傳,若無法整除都會有小數點出現。

另外 Days 屬性是回傳不足一天者採「無條件刪去法」的天數外 (整數型別),其餘的像是 Hours, Minutes, Seconds, Milliseconds 等屬性都是以用來描述該差異天數中的餘數進行表示。舉個例子說明會比較清楚:

[code:c#]

DateTime date1 = new DateTime(2008, 12,31, 23,59,59, DateTimeKind.Local);
DateTime date2 = new DateTime(2003, 2,13, 23,59,59, DateTimeKind.Local);
TimeSpan s = new TimeSpan(date1.Ticks - date2.Ticks);

[/code]

上述例子中,因為回傳的「差異天數」剛好為「整數」,並沒有時、分、秒、豪秒等餘數,所以 s.Hours, s.Minutes, s.Seconds, s.Milliseconds 等屬性回傳值都會是 0 喔!

參考資料: