web-dev-qa-db-fra.com

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

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

toute aide serait appréciée

Merci d'avance

27

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 avec une boucle:

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 voudrez peut-être envisager de renvoyer une séquence de dates en continu au lieu de List<DateTime>, laissant ainsi à l'appelant le choix de charger les dates dans une liste ou de les traiter/de les post-traiter/de les itérer partiellement, etc. Pour ce faire, vous pouvez utiliser supprimer l'appel de ToList(). Pour la boucle for, vous voudriez implémenter un iterator . Dans les deux cas, le type de retour devra être changé en IEnumerable<DateTime>.

71
Ani

Échantillon pour les versions antérieures à Linq Framework, en 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);
5
Steve Townsend

Je suis sûr qu'il y aurait peut-être de meilleures façons de le faire. 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;
}
3
Pablo Santa Cruz

Voici:

    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;
    }

Itère entre les dates du premier du mois que vous voulez jusqu'à la dernière date qui est inférieure à celle du premier du mois suivant.

PS: S'il s'agit de devoirs, merci de les étiqueter avec "devoirs"!

0
Lunivore