111,128
社区成员
发帖
与我相关
我的任务
分享 int n = 3;
var start = DateTime.Parse("2016-06-24");
for (int i = 1; i <= n; i++)
{
if((int)start.AddDays(i).DayOfWeek == 0) n++;
}
Console.WriteLine(start.AddDays(n));
static void Main(string[] args)
{
int n = 3;
var start = DateTime.Parse("2016-06-24");
var end = start.AddDays(n + (int)(n / 7));
end = start.AddDays(n + WeekOfYear(end) - WeekOfYear(start));
Console.WriteLine("{0} - {1}", start, end);
}
public static int WeekOfYear(DateTime dt)
{
var ci = new CultureInfo("zh-CN");
return ci.Calendar.GetWeekOfYear(dt, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
}
你没有提及法定假问题,我也没必要画蛇添足
string[] nds = new string[] { "10/1", "1/1", "6/2" }; // 根据 sp 的提示,加上法定假日节点
public int GetDays(DateTime date, int days) // 开始日期,计划天数
{
var holidays = nds.Select(s => DateTime.Parse(s)); // 获取法定假日,这里可能需要跨年判断,你自己想想
var dates = Enumerable.Range(0, days) // 获取计划日期中的休息天和法定假日天数,6/2 -> 6/5 试试结果
.Select(s => date.AddDays(s))
.Count(c => c.DayOfWeek == DayOfWeek.Sunday || holidays.Contains(c));
return days + dates;
}
// 调用
var beginDate = DateTime.Parse("2016-6-1"); // 开始日期
var days = GetDays(beginDate, 8); // 8 为工作日,返回包含休假的天数
var endDate = beginDate.AddDays(days); // 根据需要看是不是 -1
Console.WriteLine("{0:d}, {1:d}, {2}, {3}", beginDate, endDate, 8, days);
// 下面的代码可以根据开始日期,天数,获取工作日期的数组
var allDates = Enumerable.Range(0, 8)
.Select(s => beginDate.AddDays(s))
.ToArray();
Console.WriteLine(string.Join(",", allDates)); // 输出所有日期
var days = Enumerable.Range(0, DateTime.MinValue.AddYears(DateTime.Today.Year).AddDays(-1).DayOfYear)
.Select(s => DateTime.MinValue.AddYears(DateTime.Today.Year - 1).AddDays(s))
.Select(s => string.Format("{0,-15:d}{1,-10}{2}", s.Date, s.DayOfWeek, s.DayOfWeek == DayOfWeek.Sunday));
Console.WriteLine(string.Join("\r\n", days));