200 votes

DateTime - Get mardi prochain

Comment puis-je obtenir la date de mardi prochain ? En PHP, c’est aussi simple que `` . Comment est-ce que je peux réaliser quelque chose de semblable dans .NET

472voto

Jon Skeet Points 692016

Comme je l'ai mentionné dans les commentaires, il y a différentes choses que vous pourriez dire par "mardi prochain", mais ce code vous donne "le mardi prochain afin de se produire, ou aujourd'hui si c'est déjà mardi":

DateTime today = DateTime.Today;
// The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
int daysUntilTuesday = ((int) DayOfWeek.Tuesday - (int) today.DayOfWeek + 7) % 7;
DateTime nextTuesday = today.AddDays(daysUntilTuesday);

Si vous voulez donner "une semaine de temps" si ce n'est déjà mardi, vous pouvez utiliser:

// This finds the next Monday (or today if it's Monday) and then adds a day... so the
// result is in the range [1-7]
int daysUntilTuesday = (((int) DayOfWeek.Monday - (int) today.DayOfWeek + 7) % 7) + 1;

... ou vous pouvez utiliser la formule d'origine, mais à partir de demain:

DateTime tomorrow = DateTime.Today.AddDays(1);
// The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
int daysUntilTuesday = ((int) DayOfWeek.Tuesday - (int) tomorrow.DayOfWeek + 7) % 7;
DateTime nextTuesday = tomorrow.AddDays(daysUntilTuesday);

EDIT: Juste pour faire de ce gentil et polyvalent:

public static DateTime GetNextWeekday(DateTime start, DayOfWeek day)
{
    // The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
    int daysToAdd = ((int) day - (int) start.DayOfWeek + 7) % 7;
    return start.AddDays(daysToAdd);
}

Donc, pour obtenir la valeur de "aujourd'hui ou dans les 6 prochains jours":

DateTime nextTuesday = GetNextWeekday(DateTime.Today, DayOfWeek.Tuesday);

Pour obtenir la valeur de "le mardi prochain à l'exclusion d'aujourd'hui":

DateTime nextTuesday = GetNextWeekday(DateTime.Today.AddDays(1), DayOfWeek.Tuesday);

83voto

Sven Points 10540
Ça devrait marcher.

9voto

Brent Points 465

Il existe des solutions moins verbeux et plus intelligent/élégante à ce problème, mais la fonction c# suivante fonctionne vraiment bien pour un certain nombre de situations.

6voto

Mutt Points 810
DateTime nextTuesday = DateTime.Today.AddDays(((int)DateTime.Today.DayOfWeek - (int)DayOfWeek.Tuesday) + 7);

4voto

Blindy Points 26706
DateTime nexttuesday=DateTime.Today.AddDays(1);

while(nexttuesday.DayOfWeek!=DayOfWeek.Tuesday)
   nexttuesday = nexttuesday.AddDays(1);

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