DateTime.CompareTo應用於不含假日的日期比較

DateTime.CompareTo應用於不含假日的日期比較

最近遇到一個專案需要以程式方式計算某一個系統日期加上N天(假設星期六日為非工作日,若系統日期加上N天為星期六、日,則自動順延至下一個工作日)後是否大於使用者輸入的日期,這種日期比較的需求許多AP都會用到,因此把它整理以方便將來reuse,在此運用DateTime.CompareTo方法及DateTime.DateOfWeek屬性來完成,說明如下:

image

image

  • 下列程式碼用來必較FirstDate是否小於SecondDate加上N天。
   1:  /// <summary>
   2:  /// 比較日期
   3:  /// </summary>
   4:  /// <param name="FirstDate">第一個日期</param>
   5:  /// <param name="SecondDate">第二個日期</param>
   6:  /// <param name="interval">間隔時間</param>
   7:  /// <returns></returns>
   8:  private bool CompareDate(DateTime FirstDate, DateTime SecondDate, int interval)
   9:  {
  10:      if (FirstDate.CompareTo(GetNextWeekday(SecondDate.AddDays(interval))) < 0)
  11:          return true;
  12:      else
  13:          return false;
  14:  }

  • 上述程式中以GetNextWeekday方法來檢查SecondDate加上N天是否為星期六、日,若是則以遞迴方式找到下一個工作日。
   1:  /// <summary>
   2:  /// 取得下一個非假日
   3:  /// </summary>
   4:  /// <param name="date">欲比較的日期</param>
   5:  /// <returns></returns>
   6:  private DateTime GetNextWeekday(DateTime date)
   7:  {
   8:      if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
   9:          return GetNextWeekday(date.AddDays(1));
  10:      else
  11:          return date;
  12:  }
  • 下列程式碼為使用ComareDate方法的範例。
bool bolIsExpired = CompareDate(dtDueDate, dtSignedDate, 2);

TODO:

  • 可再加入符合當地國定假日的非工作日,讓這個日期比較的功能更趨完整。
  • 日期比較須注意當地語系的問題。

參考資料: