У меня есть следующий код для расчета минут между начальной и конечной датой. Также учитывается рабочее время (от 9 до 5), чтобы он не мог рассчитать ничего за пределами рабочего времени.Проблема с вычислением прошедших минут между двумя датами
Он работает нормально, если начальная и конечная даты находятся в рабочем состоянии, но если начальная дата находится за пределами рабочего времени (до 9 часов утра), она возвращает отрицательное число.
private static int GetMinutesBetweenTwoDates(DateTime startDate, DateTime endDate)
{
var minutes = from day in startDate.DaysInRangeUntil(endDate)
where !day.IsWeekendDay()
let start = Max(day.AddHours(9), startDate)
let end = Min(day.AddHours(17), endDate)
select (end - start).TotalMinutes;
}
private static DateTime Max(DateTime a, DateTime b)
{
return new DateTime(Math.Max(a.Ticks, b.Ticks));
}
private static DateTime Min(DateTime a, DateTime b)
{
return new DateTime(Math.Min(a.Ticks, b.Ticks));
}
public static IEnumerable<DateTime> DaysInRangeUntil(this DateTime start, DateTime end)
{
return Enumerable.Range(0, 1 + (int)(end.Date - start.Date).TotalDays)
.Select(dt => start.Date.AddDays(dt));
}
public static bool IsWeekendDay(this DateTime dt)
{
return dt.DayOfWeek == DayOfWeek.Saturday
|| dt.DayOfWeek == DayOfWeek.Sunday;
}
Благодаря
dont написать linq, чтобы вы могли отлаживать свой код. после поиска проблемы, тогда начните писать для него подходящий linq (если хотите). –
Как насчет праздничных дней в банке? – batwad
@batwad У меня есть отдельная логика, которая удаляет минуты праздничных дней в банке из общего количества прошедших минут. – Scorpion