Как удалить определенный временной интервал, из разницы между двумя датами - PullRequest
0 голосов
/ 22 апреля 2020
string StartDateString = "2020-04-20 18:05:07.6187";
DateTime StartDate = DateTime.Parse(StartDateString);

string EndDateString = "2020-04-22 14:10:00.6187";
DateTime EndDate = DateTime.Parse(EndDateString);

TimeSpan DifferenceStartDateEndDate = StartDate - EndDate;

Теперь я хочу удалить время с 22:00 до 8:00 из DifferenceStartDateEndDate (1 день 20 часов четыре минуты). Т.е. я хочу удалить время между 22:00 и 8:00, которое будет происходить от StartDate до EndDate.

1 Ответ

0 голосов
/ 22 апреля 2020

Насколько я понимаю, вам нужно добавлять в свои расчеты только часы в день, в течение которого ваш бизнес активен. (08:00 - 22:00)

Вот два помощника:

// For the first day in our calculation
// Start at 08:00 if the given date has an hour component that is earlier
static TimeSpan GetTill2200(DateTime date)
{
    if (date.Hour >= 22) return TimeSpan.Zero;
    if (date.Hour < 8) date = date.Date.AddHours(8);
    return date.Date.AddHours(22) - date;
}

// For the last day in our calculation
// End at 22:00 if the given date has an hour component that is later
static TimeSpan GetFrom0800(DateTime date)
{
    if (date.Hour < 8) return TimeSpan.Zero;
    if (date.Hour >= 22) date = date.Date.AddHours(22);
    return date - date.Date.AddHours(8);
}

А вот поток кода, который объединяет даты начала и окончания и даты в середине

// StartDate and EndDate variables as in your question.

TimeSpan result = GetTill2200(StartDate);

DateTime currentDate = StartDate.AddDays(1);
while (currentDate.Date < EndDate.Date)
{
    // Add 14 hours
    // Total: 17:54:52:3813
    result = result.Add(TimeSpan.FromHours(14));
    currentDate = currentDate.AddDays(1);
}

// returns 06:10:00.6187
// Total = 1.00:04:53 ( 1 days, 4 minutes, 53 seconds )
result = result.Add(GetFrom0800(EndDate));

// Prints 1.00:04:53
Console.WriteLine(result);
...