Время начала и окончания недели

У меня есть строка, которая представляет время начала (в секундах от полуночи) и продолжительность (в секундах) с воскресенья по субботу.

0 0 79200 21600 36000 18000 0 0 21600 43200 0 0 0 0

Сломан

0 0 означает, что в воскресенье нет начала и конца.
79200 21600 означает начало в 22:00 понедельник, конец 4:00 вторник
36000 18000 означает начало в 10:00 вторник, конец в 15:00 вторник
0 0 означает, что в среду нет начала и окончания
21600 43200 означает начало 6 утра четверга конец 18 вечера четверг
0 0 означает отсутствие начала и окончания в пятницу
0 0 означает отсутствие начала и окончания в субботу

Вышеупомянутое представляет собой следующее

график часов дней недели

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

У меня сейчас есть это

int monstart;
TimeSpan monstartint = TimeSpan.FromSeconds(monstart);
int monduration;
int monend = monstart + monduration;

но это показывает время начала правильно, но показывает конец как 1.04: 00: 00

Я бы хотел что-то подобное

Понедельник 22:00:00 -> вторник 04:00:00


person Riaan Badenhorst    schedule 03.11.2015    source источник
comment
По какой причине вы не можете просто сравнить результат с одним днем, а если он больше, то прибавить единицу к дню и вычесть единицу из промежутка времени?   -  person Ian Mercer    schedule 03.11.2015
comment
Привет, Ян, можешь дать мне знать, как это сделать?   -  person Riaan Badenhorst    schedule 03.11.2015
comment
Спасибо @IanMercer. Я построил кое-что на основе того, что вы представили. Работает хорошо, но мне придется делать это каждый день. Я не уверен, где опубликовать то, что я сделал. Я хочу знать, могу ли я создать метод (не уверен, что он вызвал), чтобы я мог вызвать его из своей основной программы.   -  person Riaan Badenhorst    schedule 03.11.2015
comment
Если у вас есть обновление для вопроса, отредактируйте вопрос с обновлением, возможно, под новым заголовком «Обновление». Если он начинает превращаться в новый вопрос, отметьте этот вопрос как ответ и откройте новый.   -  person Ian Mercer    schedule 03.11.2015


Ответы (1)


Предполагая, что вы можете использовать string.Split и int.Parse, чтобы получить значения в два массива: startTimes и durations длиной 7 каждый.

for (int day = 0; day < 7; day++)
{
   TimeSpan start = TimeSpan.FromSeconds(startTimes[day]);
   TimeSpan duration = TimeSpan.FromSeconds(durations[day]);
   TimeSpan end = start + duration;
   int endDay = day;

   if (end.TotalHours > 24)
   { 
       end = end - TimeSpan.FromHours(24);
       endDay = (endDay + 1)% 7;
   }

   // Period is from day, start to endDay, end
   // Convert day to (DayName) and output it 

} 
person Ian Mercer    schedule 03.11.2015