作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个要求,我需要在日期字段上工作,所以要求是这样的
我将该字段称为最短可能日期
给日期加1
如果最小可能日期恰好在添加 1 天后的周末(周六或周日),则显示下一个工作日,即周一
如果可能的最短日期恰好是假日,则显示下一个工作日。 (节假日 1.1、1.5、3.10、25.12、26.12)
如果最小可能日期恰好在加上 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/
我阅读了一些与C#函数相关的问题/答案来计算工作日(从周一到周五的日子);有些使用扩展代码来实现这一点。 我有一个超过 50,000 行的数据表,我需要一种有效的方法来计算这些信息。 最佳答案 根据@
有没有人想出如何配置 datepicker 以不显示特定日期(例如,7 月 4 日)?似乎这可以使用 beforeShowDay 来完成,但我并不肯定。 最佳答案 http://jsfiddle.ne
我是一名优秀的程序员,十分优秀!