gpt4 book ai didi

c# - 如何获得下一个工作日,不包括周末和节假日

转载 作者:可可西里 更新时间:2023-11-01 03:13:55 26 4
gpt4 key购买 nike

我有一个要求,我需要在日期字段上工作,所以要求是这样的

我将该字段称为最短可能日期

  1. 给日期加1

  2. 如果最小可能日期恰好在添加 1 天后的周末(周六或周日),则显示下一个工作日,即周一

  3. 如果可能的最短日期恰好是假日,则显示下一个工作日。 (节假日 1.1、1.5、3.10、25.12、26.12)

  4. 如果最小可能日期恰好在加上 1 天后的周末(星期六或星期日),而后一天是假期,则显示下一个工作日。例如:+1 天后,如果可能的最短日期是星期六,我们将不得不显示星期一。但如果星期一恰好是假期,那么我们必须显示星期二。

我已经尝试通过多个 if 和 else 案例来解决上述问题,但只是想知道是否有任何通用且优雅的方法来解决这个问题?

我试过了

var holidays = new List<DateTime>();
holidays.Add(new DateTime(DateTime.Now.Year,1,1));
holidays.Add(new DateTime(DateTime.Now.Year,1,5));
holidays.Add(new DateTime(DateTime.Now.Year,3,10));
holidays.Add(new DateTime(DateTime.Now.Year,12,25));

if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
{
//Logic to add +1 and again some logic to check for weekends and weekdays
}
else if (holidays.Contain(date))
{
//Logic to add +1 and again some logic to check for weekends and weekdays
}

最佳答案

基本上你想得到下一个工作日。所以你可以在这个条件下循环,在当前日期上加 1 天

do {
date = date.AddDays(1);
} while(IsHoliday(date) || IsWeekend(date));

在前面的代码中,IsHoliday 是一个判断日期是否为假期的谓词。例如,厚颜无耻地重用你的代码:

class Program
{
private static readonly HashSet<DateTime> Holidays = new HashSet<DateTime>();

private static bool IsHoliday(DateTime date)
{
return Holidays.Contains(date);
}

private static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday
|| date.DayOfWeek == DayOfWeek.Sunday;
}


private static DateTime GetNextWorkingDay(DateTime date)
{
do
{
date = date.AddDays(1);
} while (IsHoliday(date) || IsWeekend(date));
return date;
}

static void Main(string[] args)
{
Holidays.Add(new DateTime(DateTime.Now.Year, 1, 1));
Holidays.Add(new DateTime(DateTime.Now.Year, 1, 5));
Holidays.Add(new DateTime(DateTime.Now.Year, 3, 10));
Holidays.Add(new DateTime(DateTime.Now.Year, 12, 25));

var dt = GetNextWorkingDay(DateTime.Parse(@"2015-10-31"));

Console.WriteLine(dt);

Console.ReadKey();
}
}

关于c# - 如何获得下一个工作日,不包括周末和节假日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com