Dupliquer possible:
ASP.net le mardi prochain
Étant donné le jour du mois, comment puis-je obtenir le dimanche suivant à partir de ce jour?
Donc si je passe le 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
retournera une valeur enum qui représente le jour (où 0 est le 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);
/// <summary>
/// Finds the next date whose day of the week equals the specified day of the week.
/// </summary>
/// <param name="startDate">
/// The date to begin the search.
/// </param>
/// <param name="desiredDay">
/// The desired day of the week whose date will be returneed.
/// </param>
/// <returns>
/// 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.
/// </returns>
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: mardi = 2
Puis soustrayez-le du dimanche, 7-2 = 5 jours à ajouter pour obtenir la prochaine date du dimanche. :)
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 renvoyée si la date est déjà un dimanche; Je suppose que non, mais changez ce qui précède en 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;
}