Просто интересно, есть ли более оптимизированный и/или более быстрый способ (используя LINQ, например) написать то, что у меня есть, чтобы получить список диапазонов дат в течение двух дней?Существует ли оптимизированный способ получения рабочих недель между двумя датами?
Это то, что я в настоящее время ..
// Some storage
public class Bucket
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
// Other code removed for brevity ...
DateTime start = new DateTime(2015, 7, 1);
DateTime end = new DateTime(2015, 9, 1);
DayOfWeek firstDayOfWeek = DayOfWeek.Monday;
DayOfWeek lastDayOfWeek = DayOfWeek.Friday;
var buckets = new List<Bucket>();
var currentDate = start;
DateTime startOfBucket = currentDate;
DateTime endOfBucket = currentDate;
while (currentDate <= end)
{
var currentDayOfWeek = currentDate.DayOfWeek;
// Skip days outside the business week
if (currentDayOfWeek >= firstDayOfWeek && currentDayOfWeek <= lastDayOfWeek)
{
if (currentDayOfWeek == firstDayOfWeek)
{
// Start a new bucket
startOfBucket = currentDate;
}
if ((currentDayOfWeek == lastDayOfWeek) || (currentDate == end))
{
// End of bucket
endOfBucket = currentDate;
// Create bucket
buckets.Add(new Bucket()
{
StartDate = startOfBucket,
EndDate = endOfBucket
});
}
}
currentDate = currentDate.AddDays(1);
}
И это даст мне следующие диапазоны дат ...
- Начало: 01/Июль/2015 Конец: 03/Июль/2015
- Начало: 06/июль/2015 Конец: 10/июль/2015
- Старт: 13/июль/2015 Конец: 17/июль/2015
- Начало: 20/июль/2015 Конец: 24/июль/2 015
- Начало: 27/Июль/2015 Конец: 31/Июль/2015
- Начало: 03/Август/2015 Конец: 07/Август/2015
- Начало: 10/Август/2015 Окончание: 14/Август/2015
- Начало: 17/август/2015 Конец: 21/август/2015
- Начало: 24/август/2015 Конец: 28/август/2015
- Начало: 31/август/2015 Конец: 01/Сентябрь/2015 год
NB Первая и последняя недели целенаправленно не полные недели (они соответствуют заданному дате).
Редактировать Решение, предлагаемое here дает количество дней между двумя датами, но я заинтересован в получении коллекции диапазонов дат.
Кроме того, мне не нужно учитывать любые праздники.
Спасибо,
Что бы вы хотели сделать в отношении государственных праздников? Культуры, где рабочая неделя не всегда с понедельника по пятницу? –
Взгляните на http://stackoverflow.com/questions/1617049/calculate-the-number-of-business-days-between-two-dates – serhiyb
@serhiyb Мне особенно нравится ответ Хосе Сильва –