c# - 我如何计算假期?

标签 c# .net datetime

我有一个应用程序可以在人们生病时进行登记,并在此事件发生后的特定工作日内向经理发送通知。

我可以使用 DateTime 的属性来跳过周末,但如何跳过假期?

我在某处读到教堂假期是从复活节开始计算的。但是怎么办?我如何首先找到复活节?

最佳答案

跳过日期之间的假期和计算复活节是两个不同的野兽,您可能想要前者。

您的应用程序应该维护一个假期列表,正如@GeneMyers 关于 Holidays in United States 的评论所建议的那样

有了这个列表,您可以使用如下代码:

private static void Main(string[] args)
{
    var start  = new DateTime(2015, 01, 01); // Thusday
    var finish = new DateTime(2015, 01, 31); // Saturday

    var totalDays = finish.Subtract(start).TotalDays;  // 30 days
    var test1 = GetWorkingDays(start, finish, false, new List<DateTime>()); // should be 30
    var test2 = GetWorkingDays(start, finish, true , new List<DateTime>()); // should be 21
    var test3 = GetWorkingDays(start, finish, true , new List<DateTime>     // should be 19
    {
        new DateTime(2015, 01, 01), // New Year's Day
        new DateTime(2015, 01, 09), // Random holiday
        new DateTime(2015, 01, 25), // Sao Paulo city foundation, sunday
    });
}

public static int GetWorkingDays(DateTime from, DateTime to, 
                                 bool skipWeekends, IEnumerable<DateTime> holidays)
{
    var totalDays = (int)to.Subtract(from).TotalDays;

    var isHoliday = new Func<DateTime, bool>(date =>
        holidays.Contains(date));
    var isWeekend = new Func<DateTime, bool>(date => 
        date.DayOfWeek == DayOfWeek.Saturday || 
        date.DayOfWeek == DayOfWeek.Sunday);

    return Enumerable
        .Range (0, totalDays + 1)
        .Select(days => from.AddDays(days))
        .Count (date => (!skipWeekends || !isWeekend(date)) && !isHoliday(date)) - 1;
}

关于c# - 我如何计算假期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30692597/

相关文章:

.net - .Net 社区项目的 future

使用时区规范按天进行 django 组查询

sql-server - 计算发货时间超过 X 天的订单百分比的更好方法?

c# - 根据包含在其中的项目在 .net 类库中引用不同的模型对象

c# - LINQ to SQL 从字符串创建查询

javascript - 如何获取表格行中被单击元素的 id?

.net - 发生 HttpException : File does not exist

python - 日期时间.date.fromtimestamp : ignores hour and minute

c# - WPF: ListView 在顶部而不是底部显示最近添加的项目

C# 测量转换类