private TkTimeSet GetVacancy(DateTime start, DateTime end, TkTimeSet busy, TkWorkWeekConfig config) { var workWeeks = TkTimeSet.WorkWeeks(start, end, config); var vacancy = TkTimeSet.Difference(workWeeks, busy); return(vacancy); }
public static TkTimeSet WorkWeeks(DateTime start, DateTime end, TkWorkWeekConfig config) { var intervals = new List <TkInterval>(); var current = start; while (current <= end) { if (config.WorkDays.Contains(current.DayOfWeek)) { intervals.Add(WorkDay(current, config)); } current = current.AddDays(1); } return(new TkTimeSet(intervals.ToArray())); }
public static TkInterval WorkDay(DateTime day, TkWorkWeekConfig config) { var startsAt = DateTime.SpecifyKind(new DateTime( day.Year, day.Month, day.Day, config.WorkDayStartHourUtc, 0, 0), DateTimeKind.Utc); var endsAt = DateTime.SpecifyKind(new DateTime( day.Year, day.Month, day.Day, config.WorkDayStartHourUtc + config.WorkDayDuration, 0, 0), DateTimeKind.Utc); return(new TkInterval(startsAt, endsAt)); }