2014-10-16 3 views
-3

Мне нужно написать метод, в котором я буду передавать дату начала и дату окончания. Результат должен быть списком с двумя параметрами. Один - это название месяца, а другое - рабочие дни в этом месяце. (удаление сидения и солнца)получать месячные рабочие дни между заданной датой начала и датой окончания

Просьба сообщить.

public List<MonthDaysData> GetMonthwiseWorkingdays(DateTime? start, DateTime? end) 
{ 
List<MonthDaysData> monthdays = new List<MonthDaysData>(); 

// Coding to get the output 
return monthdays; 
} 

public class MonthDaysData 
{ 
    public Int32? Month { get; set; } 
    public Int32? days { get; set; } 
} 
+0

Так почему бы не просто зациклиться от даты начала до конца, проверьте, праздник ли он или нет, и добавьте его в список, если это необходимо? Что вы пробовали до сих пор? –

+0

также предоставляют определение MonthDaysData. – Mukund

+0

общественный класс MonthDaysData { общественный Int32? Месяц {get; задавать; } общественный Int32? дней {получить; задавать; } } – Ram

ответ

0

Вы можете использовать метод расширения, чтобы получить значения, как это ...

public static class Extensions 
{ 
    public static List<MonthDaysData> GetWorkingDaysPerMonthTo(this DateTime from, 
         DateTime to) 
    { 
     var workings = new Dictionary<int, int>(); 
     var currentDateTime = from; 

     while (currentDateTime <= to) 
     { 
      if (currentDateTime.DayOfWeek != DayOfWeek.Saturday 
            && currentDateTime.DayOfWeek != DayOfWeek.Sunday 
            && !currentDateTime.IsHoliday("CountryCode")) 
       if (!workings.ContainsKey(currentDateTime.Month)) 
        workings.Add(currentDateTime.Month, 1); 
       else 
       { 
        int curWork; 
        workings.TryGetValue(currentDateTime.Month, out curWork); 
        curWork++; 
        workings.Remove(currentDateTime.Month); 
        workings.Add(currentDateTime.Month, curWork); 
       } 

      currentDateTime = currentDateTime.AddDays(1); 
     } 
     return workings.Select(work => new MonthDaysData {Month = work.Key, 
                 days = work.Value}).ToList(); 
    } 

    public static bool IsHoliday(this DateTime date, string countryCode) 
    { 
     // some service that takes a country code and 
     // returns true/false if its a holiday 
     return false; 
    } 
} 

Вы могли бы назвать его из любого места, как ...

var today = new DateTime(2014, 10, 16); 
var dates = today.GetWorkingDaysPerMonthTo(new DateTime(2014, 12, 16)); 

Однако, это просто работает с будними днями в рабочие дни, вам нужно будет проверить праздничные дни и т. д.

0

Это звучит как домашнее задание и не показать, что вы пробовали, так что я не буду в большом количестве весь код для вас. Есть quite some questions по этому вопросу. Смотрите, например Get working days DateTime List of two dates для простой реализации, которая возвращает список дат рабочих дней:

IEnumerable<DateTime> workingDays = WorkDaysBetween(DateTime start, DateTime end); 

Затем вы должны сгруппировать их по месяцу согласно вашему требованию:

var groupedByMonth = workingDays.GroupBy(d => new DateTime(d.Year, d.Month, 1)); 

Оттуда вы должны быть в состоянии Select() надлежащей проекции.

Смежные вопросы