Метод C # для получения слотов рабочего времени на основе нескольких параметров - PullRequest
0 голосов
/ 09 сентября 2011

Может ли кто-нибудь помочь мне написать метод на языке c #, который бы принимал следующие параметры и предоставлял список рабочего времени.

1.String workStartingTime

2.String workStopTime

3.int iBreaktime

4.int iWorkInterval

Я написал код, который работает, но, черт возьми, он слишком необслуживаемый и надуманный.Приведен пример выходных данных для выполнения с указанным ниже параметром:

workStartTime = "9:00 AM",

workStopTime = "6:00 PM",

ibreakTime = 10,

iWorkInterval = 60

Выход:

9:00 AM - 10:00 AM

10:10 AM - 11:10 AM

11:20 AM - 12:20 PM

12:30 PM - 01:30 PM

надеюсь, что вы поняли идею, для каждого интервала оставьте промежуток и охватите вещь до времени окончания работы.

Примечание:

Кстати,время начала и окончания работы хранятся в базе данных, например, 9:30 AM - 10:00 PM или 9:00 - 16:00, т. е. 12 или 24-часовой формат.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Вы можете использовать CalendarPeriodCollector из бесплатной библиотеки периодов времени для .NET .

Инструмент поддерживает различные фильтры, включая рабочее время:

// ----------------------------------------------------------------------
public void CalendarPeriodCollectorSample()
{
  CalendarPeriodCollectorFilter filter = new CalendarPeriodCollectorFilter();
  filter.Months.Add( YearMonth.January ); // only Januaries
  filter.WeekDays.Add( DayOfWeek.Friday ); // only Fridays
  filter.CollectingHours.Add( new HourRange( 8, 18 ) ); // working hours

  CalendarTimeRange testPeriod =
    new CalendarTimeRange( new DateTime( 2010, 1, 1 ), new DateTime( 2011, 12, 31 ) );
  Console.WriteLine( "Calendar period collector of period: " + testPeriod );
  // > Calendar period collector of period:
  //            01.01.2010 00:00:00 - 30.12.2011 23:59:59 | 728.23:59

  CalendarPeriodCollector collector =
          new CalendarPeriodCollector( filter, testPeriod );
  collector.CollectHours();
  foreach ( ITimePeriod period in collector.Periods )
  {
    Console.WriteLine( "Period: " + period );
  }
  // > Period: 01.01.2010; 08:00 - 17:59 | 0.09:59
  // > Period: 08.01.2010; 08:00 - 17:59 | 0.09:59
  // > Period: 15.01.2010; 08:00 - 17:59 | 0.09:59
  // > Period: 22.01.2010; 08:00 - 17:59 | 0.09:59
  // > Period: 29.01.2010; 08:00 - 17:59 | 0.09:59
  // > Period: 07.01.2011; 08:00 - 17:59 | 0.09:59
  // > Period: 14.01.2011; 08:00 - 17:59 | 0.09:59
  // > Period: 21.01.2011; 08:00 - 17:59 | 0.09:59
  // > Period: 28.01.2011; 08:00 - 17:59 | 0.09:59
} // CalendarPeriodCollectorSample
0 голосов
/ 09 сентября 2011
void CreateTimes(DateTime start, DateTime end, int interval, TimeSpan work)
{
    DateTime currentStart = start;
    while(currentStart < end && currentStart.Add(work)<end)
    {
        Console.WriteLine(String.Format("{0} - {1}", currentStart, currentStart.Add(work)));
        currentStart.AddMinutes(interval);
    }
}
...