给定一个日期我如何添加一些天数,但不包括周末.例如,鉴于11/12/2008(星期三),并且将在2008年11月19日(星期三)而不是11/17/2008(星期一)增加5.
我可以想到一个简单的解决方案,比如循环每天添加和检查是否是一个周末,但我想看看是否有更优雅的东西.我也对任何F#解决方案感兴趣.
使用Fluent DateTime https://github.com/FluentDateTime/FluentDateTime
var dateTime = DateTime.Now.AddBusinessDays(4);
public DateTime AddBusinessDays(DateTime dt, int nDays) { int weeks = nDays / 5; nDays %= 5; while(dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) dt = dt.AddDays(1); while (nDays-- > 0) { dt = dt.AddDays(1); if (dt.DayOfWeek == DayOfWeek.Saturday) dt = dt.AddDays(2); } return dt.AddDays(weeks*7); }
在不使算法过于复杂的情况下,您可以创建一个扩展方法,如下所示:
public static DateTime AddWorkingDays(this DateTime date, int daysToAdd) { while (daysToAdd > 0) { date = date.AddDays(1); if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday) { daysToAdd -= 1; } } return date; }