C#如何计算排除特定日期的工作日(节假日)

标签 c# .net date datetime date-arithmetic

我阅读了一些与C#函数相关的问题/答案来计算工作日(从周一到周五的日子);有些使用扩展代码来实现这一点。

我有一个超过 50,000 行的数据表,我需要一种有效的方法来计算这些信息。

最佳答案

根据@MiBols 的回答,一个更有效的解决方案是使用 HashSet<DateTime>而不是 List<DateTime>然后在 O(1) 中进行搜索:

/// <summary> Get working days between two dates (Excluding a list of dates - Holidays) </summary>
/// <param name="dtmCurrent">Current date time</param>
/// <param name="dtmFinishDate">Finish date time</param>
/// <param name="excludedDates">Collection of dates to exclude (Holidays)</param>
public static int fwGetWorkingDays(this DateTime dtmCurrent, DateTime dtmFinishDate, 
                                   HashSet<DateTime> excludedDates)
{
    Func<DateTime, bool> workDay = currentDate => (
        currentDate.DayOfWeek == DayOfWeek.Saturday ||
        currentDate.DayOfWeek == DayOfWeek.Sunday ||
        excludedDates.Contains(currentDate.Date));

    return Enumerable.Range(0, 1 + (dtmFinishDate - dtmCurrent).Days)
        .Count(intDay => workDay(dtmCurrent.AddDays(intDay)));
}

关于C#如何计算排除特定日期的工作日(节假日),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480593/

相关文章:

php - 我如何在 php 中每 3 个月运行一次从开始日期到结束日期的循环

c# - 如何将 XmlSerializer 类发送到 WebService 然后反序列化它?

c# - 在 Xaml 中设置字符属性

c# - 我必须在 Windows 服务中实现 Stop 方法吗?

c# - 如何在 pictureBox1 边框周围绘制一个矩形?

python - Django 复杂查询

c# - 在 C# 中从 mongodb 获取单个对象

c# - 在 C# 中使用数组填充 Xaml

c# - x64 系统上的 x86 应用程序使用哪个 ngen?

r - 转换 12-okt-2007 格式的本地化日期