取得間隔天數
一般情況下最簡單取得間隔天數的方式就是使用 TimeSpan:
DateTime startDate = new DateTime(2023, 1, 1);
DateTime endDate = new DateTime(2023, 1, 20);
TimeSpan interval = endDate - startDate;
Console.WriteLine($"總天數(double): {interval.TotalDays}"); // 19
Console.WriteLine($"天數(int): {interval.Days}"); // 19
需要注意的是 TotalDays 和 Days 都不會包含結束的那天,如果要包含結束的那天則要自己再 +1 ,這樣 1 ~ 20 號才會是 20 天。
另外如果不足一天的話 Days 就會被無條件捨去,所以只要有包含時間的話 Days 顯示的天數基本上就會再少一天:
DateTime startDate = new DateTime(2023, 1, 1, 22, 57, 57);
DateTime endDate = new DateTime(2023, 1, 20);
TimeSpan interval = endDate - startDate;
Console.WriteLine($"總天數(double): {interval.TotalDays}"); // 18.04309027777778
Console.WriteLine($"天數(int): {interval.Days}"); // 18
Console.WriteLine($"小時: {interval.Hours}"); // 1
Console.WriteLine($"分鐘: {interval.Minutes}"); // 2
Console.WriteLine($"秒: {interval.Seconds}"); // 3
取得扣除六日的間隔天數
好像沒有什麼內建的方法可以快速的取得扣除六日的間隔日期天數,不過寫起來也不難。並且在這個自訂的方法中還加了一個 bool 用來控制是否要計算結束的那一天:
/// <summary>
/// 計算不包含六日的間隔天數
/// </summary>
/// <param name="start">開始日期</param>
/// <param name="end">結束日期</param>
/// <param name="includeEndDate">是否包含結束日期</param>
/// <returns></returns>
int CalculateWorkingDays(DateTime start, DateTime end, bool includeEndDate = false)
{
if (includeEndDate) end = end.AddDays(1);
var workingDays = 0;
for (var date = start; date < end; date = date.AddDays(1))
{
if (date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday) continue;
workingDays++;
}
return workingDays;
}
DateTime startDate = new DateTime(2023, 1, 1);
DateTime endDate = new DateTime(2023, 1, 20);
int workingDays = CalculateWorkingDays(startDate, endDate);
Console.WriteLine($"不包括星期六和星期日的天數是:{workingDays}"); // 14
註: 2023/01/01 是星期日
參考資料:
Microsoft.Learn - TimeSpan Struct
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com