Je me demandais s'il y avait une manière plus optimisée et/ou plus propre (en utilisant LINQ par exemple) d'écrire ce que j'ai ci-dessous pour obtenir une liste de plages de dates de semaine d'affaires entre deux dates?Existe-t-il un moyen optimisé d'obtenir des semaines commerciales entre deux dates?
C'est ce que j'ai actuellement ..
// 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);
}
Et cela me donnera les plages de dates suivantes ...
- Début: 01/juillet/2015 Fin: 03/Jul/2015
- Début: 06/juillet/2015 Fin: 10/Jul/2015
- Début: 13/Jul/2015 Fin: 17/Jul/2015
- Début: 20/juillet/2015 Fin: 24/Jul/2 015
- Début: 27/juillet/2015 Fin: 31/Jul/2015
- Début: 03/août/2015 Fin: 07/août/2015
- Début: 10/août/2015 Fin: 14/Aug/2015
- Début: 17/août/2015 Fin: 21/août/2015
- Début: 24/août/2015 Fin: 28/août/2015
- Début: 31/août/2015 Fin: 01/Sept/2015
NB La première et la dernière semaine sont délibérément des semaines incomplètes (elles respectent la période donnée).
Modifier La solution fournie here donne le nombre de jours entre les deux dates mais je suis intéressé à obtenir la collection de plages de dates.
De plus, je n'ai pas besoin de prendre en compte les vacances.
Merci,
Que voudriez-vous faire au sujet des jours fériés? Cultures où la semaine de travail n'est pas toujours du lundi au vendredi? –
Jetez un coup d'oeil à http://stackoverflow.com/questions/1617049/calculer-le-numéro-du-business-jours-dans-two-dates – serhiyb
@serhiyb J'aime particulièrement la réponse de José Silva –