37 votes

Comment obtenir toutes les dates d'un mois donné en C# ?

Je veux créer une fonction qui prend le mois et l'année et retourne List<DateTime> rempli avec toutes les dates de ce mois.

Toute aide sera appréciée

Merci d'avance

97voto

Ani Points 59747

Voici une solution avec LINQ :

public static List<DateTime> GetDates(int year, int month)
{
   return Enumerable.Range(1, DateTime.DaysInMonth(year, month))  // Days: 1, 2 ... 31 etc.
                    .Select(day => new DateTime(year, month, day)) // Map each day to a date
                    .ToList(); // Load dates into a list
}

Et un autre avec une boucle "for" :

public static List<DateTime> GetDates(int year, int month)
{
   var dates = new List<DateTime>();

   // Loop from the first day of the month until we hit the next month, moving forward a day at a time
   for (var date = new DateTime(year, month, 1); date.Month == month; date = date.AddDays(1))
   {
      dates.Add(date);       
   }

   return dates;
}

Vous pourriez envisager de renvoyer une séquence de dates en continu au lieu de List<DateTime> laissant à l'appelant le choix de charger les dates dans une liste ou un tableau, de les post-traiter, de les itérer partiellement, etc. Pour la version LINQ, vous pouvez réaliser cela en supprimant l'appel à ToList() . Pour la boucle "for", vous voudrez mettre en œuvre une fonction itérateur . Dans les deux cas, le type de retour doit être modifié en IEnumerable<DateTime> .

5voto

Steve Townsend Points 36948

Échantillon pour les versions antérieures à Linq Framework, à partir de février 1999.

int year = 1999;
int month = 2;

List<DateTime> list = new List<DateTime>();
DateTime date = new DateTime(year, month, 1);

do
{
  list.Add(date);
  date = date.AddDays(1);
while (date.Month == month);

4voto

Pablo Santa Cruz Points 73944

Je suis sûr qu'il existe de meilleures façons de procéder. Mais vous pouvez utiliser ceci :

public List<DateTime> getAllDates(int year, int month)
{
    var ret = new List<DateTime>();
    for (int i=1; i<=DateTime.DaysInMonth(year,month); i++) {
        ret.Add(new DateTime(year, month, i));
    }
    return ret;
}

0voto

Lunivore Points 9281

Voilà :

    public List<DateTime> AllDatesInAMonth(int month, int year)
    {
        var firstOftargetMonth = new DateTime(year, month, 1);
        var firstOfNextMonth = firstOftargetMonth.AddMonths(1);

        var allDates = new List<DateTime>();

        for (DateTime date = firstOftargetMonth; date < firstOfNextMonth; date = date.AddDays(1) )
        {
            allDates.Add(date);
        }

        return allDates;
    }

Interroge les dates depuis le premier du mois souhaité jusqu'à la dernière date inférieure au premier du mois suivant.

PS : S'il s'agit d'un travail à la maison, merci de l'accompagner de la mention "travail à la maison" !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X