11
votes

Quel est le moyen le plus simple de calculer le lundi de la première semaine de l'année

Je veux passer en une année et récupérer une date qui représente le premier lundi de la première semaine

SO:

  • Si un passage dans 2011 , je reviendrai 3 janvier 2011
  • Si un passage dans 2010 , je reviendrai 4 janvier 2010

1 commentaires

Quelle définition de 'première semaine' utilisez-vous? Voir Cette liste de définitions


3 Réponses :


12
votes
private DateTime GetFirstMondayOfYear(int year)
{
    DateTime dt = new DateTime(year, 1, 1);

    while (dt.DayOfWeek != DayOfWeek.Monday)
    {
        dt = dt.AddDays(1);
    }

    return dt;
}

1 commentaires

Cela obtient le premier lundi de l'année, ce qui peut être ce que veut. Notez toutefois que l'ISO a une définition de «première semaine» par laquelle le lundi de la première semaine de l'année N pourrait réellement tomber en année N-1.



11
votes

Essayez ceci pour une solution sans boucle:

public DateTime FirstMonday(int year)
{
    DateTime firstDay = new DateTime(year, 1, 1);

    return new DateTime(year, 1, (8 - (int)firstDay.DayOfWeek) % 7 + 1);
}


1 commentaires

Int & Dayfweek ne sont pas compatibles. Vous avez besoin d'un casting là-bas. Autre que cela, +1 pour les boucles de fosses.



0
votes

Vous pouvez utiliser getfirstmonday (2010) pour obtenir le premier lundi pour janvier 2010 . Ou vous pouvez spécifier le mois aussi avec getfirstmonday (2010, 2) pour obtenir le premier lundi pour février 2010 .

getfirstdayofmons peut obtenir tout premier jour Pour un mois donné, Besoin de passer Dayofweek Valeur pour obtenir le résultat de requis jour . xxx


0 commentaires