Есть данные со СКУД. Это время входа и время выхода. Время работы организации с 8 до 17:00 (обед не считаем). Есть переменные - таймаут1 - 25 минут и таймаут2 - 55 минут(ниже объясню зачем они). Надо посчитать фактическое время работы. Время работы организации "Рога и копыта" с 08:00 до 17:00
Допустим человек пришел в 8:01 и ушел в 17:40. Так как он пришел в 8:01 и количество минут 01 < 25(таймаут1),то время входа будет 08:00. Время выхода 17:40. 40 > 25(таймаут1) но меньша 55(таймаут2) - поэтому округляем до 30 (до получаса). Получается что фактическое время работы с 08:00 по 17:30. Это простейший алгоритм и его перенос в код не составит проблем.
Проблемы возникают если во времени прихода или ухода будут часы.
Допустим если человек пришел в 10:25 и ушел в 16:45. Как посчитать его фактическое время?
Как-то так
DateTime time = DateTime.Now;
DateTime rounded = time.AddMilliseconds(-time.Millisecond).AddSeconds(-time.Second);
int minutes = rounded.Minute < 25 ? 0 : rounded.Minute > 55 ? 60 : 30;
rounded = rounded.AddMinutes(minutes - rounded.Minute);
Часы сами увеличатся, если мы добавим 60.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей