Comment obtenir la date du dimanche suivant?

Duplication possible:
ASP.net reçoit le mardi prochain

Étant donné un jour du mois, comment puis-je obtenir le prochain dimanche de ce jour?

Donc, si je passe mardi 13 septembre 2011, il reviendra le 18 septembre.

J’utilise cette méthode d’extension:

  public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek) { int start = (int)from.DayOfWeek; int target = (int)dayOfWeek; if (target <= start) target += 7; return from.AddDays(target - start); } 

date.AddDays(7 - (int)date.DayOfWeek) devrait le faire je pense.

date.DayOfWeek renverra une valeur enum qui représente le jour (où 0 correspond à dimanche).

  var date = DateTime.Now; var nextSunday = date.AddDays(7 - (int) date.DayOfWeek); 

Si vous avez besoin du dimanche le plus proche, code un peu différent (comme si vous étiez le dimanche, le dimanche le plus proche est aujourd’hui):

 var nearestSunday = date.AddDays(7 - date.DayOfWeek == DayOfWeek.Sunday ? 7 : date.DayOfWeek); 
 ///  /// Finds the next date whose day of the week equals the specified day of the week. ///  ///  /// The date to begin the search. ///  ///  /// The desired day of the week whose date will be returneed. ///  ///  /// The returned date is on the given day of this week. /// If the given day is before given date, the date for the /// following week's desired day is returned. ///  public static DateTime GetNextDateForDay( DateTime startDate, DayOfWeek desiredDay ) { // (There has to be a better way to do this, perhaps mathematically.) // Traverse this week DateTime nextDate = startDate; while( nextDate.DayOfWeek != desiredDay ) nextDate = nextDate.AddDays( 1D ); return nextDate; } 

La source:

http://angstrey.com/index.php/2009/04/25/finding-the-next-date-for-day-of-week/

Voici le code:

 int dayOfWeek = (int) DateTime.Now.DayOfWeek; DateTime nextSunday = DateTime.Now.AddDays(7 - dayOfWeek).Date; 

Obtenez d’abord la valeur numérique du jour de la semaine, dans votre exemple: Tuesday = 2

Puis soustrayez-le du dimanche, 7 -2 = 5 jours à append pour obtenir la date du dimanche suivant. 🙂

 DateTime dt=dateTime; do { dt=dt.AddDays(1); } while(dt.DayOfWeek!= DayOfWeek.Sunday); // 'dt' is now the next Sunday 

Votre question n’est pas claire si la même date est retournée si la date est déjà un dimanche; Je suppose que non, mais changez ce qui précède en une boucle while si je me trompe.

Exemple utilisant la récursivité

  private static DateTime GetNextSunday(DateTime dt) { var tomorrow = dt.AddDays(1); if (tomorrow.DayOfWeek != DayOfWeek.Sunday) { GetNextSunday(tomorrow); } return tomorrow; } 
 public static DateTime GetNextSunday (DateTime date) { if (date.DayOfWeek == DayOfWeek.Sunday) date = date.AddDays(1); while (date.DayOfWeek != DayOfWeek.Sunday) date = date.AddDays(1); return date; }