J'ai un exemple la date " 2010-11-09, Thuesday forte>" p>
Maintenant, je veux obtenir la date de date du lundi et du dimanche où se trouve la date indiquée ci-dessus. P>
Comment feriez-vous cela? P>
5 Réponses :
Quelque chose comme ça, bien sûr, vous voudriez rompre de la boucle à un moment donné avant la dateTime.maxvalue, mais cela devrait faire:
DateTime dt = DateTime.Parse("2010-11-09, Thuesday");
while (dt < DateTime.MaxValue)
{
if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday)
Console.WriteLine(dt.ToString());
dt.AddDays(1);
}
DateTime lundi = DateTime.now.addays ((datetime.now.dayofeek - 1) * -1) .Date; p>
DateTime dimanche = DateTime.now.adddays (7 -DateTime.now.dayofweek) .date; p> blockQuote>
Je ne pense pas que cela fonctionne dimanche. N'avez-vous pas demain et dimanche prochain qui ne serait pas lié aujourd'hui (dimanche)? (0-1) * - 1 = 1, 7-0 = 7.
C'est probablement ce que vous êtes après: éditer: puisque lastmonday code> n'est pas toujours ce que le nom suggère (voir les commentaires), le suivant -Liner est probablement plus au point: p>
Belle solution, beaucoup plus propre que la mienne.
Cela a deux erreurs, une faute de frappe lundi. Devrait être minuscule 'M' pour lundi. Aussi pour aller dimanche de lundi, vous ajouteriez 6 jours non 7. Ajouter sept jours vous donne le lundi suivant.
Cela a une autre erreur. Si aujourd'hui est un dimanche, il retournera lundi prochain (offset = -1) au lieu de lundi dernier. Cast comme un entier dimanche retournera 0 et lundi rentrera 1, si dimanche - lundi = -1. Ajout de cette ligne, la corrigera: offset = (offset <0)? 6: offset;
@gijswijs - Vous avez raison, mais notez que LastMonday était conçu comme un intermédiaire, mon code produit le bon nextsunday pour un dimanche (- -1 + 6 = +7). Donc, dans le recul, lastmonday code> a été mal nommé.
Il est facilement facile si vous utilisez une méthode conditionnelle
if (v_datetime.DayOfWeek== DayOfWeek.Sunday)
{
return true;
}
if (v_datetime.DayOfWeek== DayOfWeek.Monday)
{
}
Veuillez mettre à jour votre réponse pour fournir une réponse complète à la question initiale plutôt que de simplement répondre au commentaire de quelqu'un.
/// <summary>
/// Returns the day that is the specific day of week of the input day.
/// </summary>
/// <param name="input">The input day.</param>
/// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param>
/// <returns></returns>
public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek)
{
if(input.DayOfWeek == DayOfWeek.Sunday)
{
dayOfWeek -= 7;
}
// lastMonday is always the Monday before nextSunday.
// When today is a Sunday, lastMonday will be tomorrow.
int offset = input.DayOfWeek - DayOfWeek.Monday;
DateTime lastMonday = input.AddDays(-offset);
DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek);
return nextDayOfWeek;
}
@Lisa; Vous voulez dire que vous voulez les dates du lundi et du dimanche qui sont dans la semaine de ce mardi?
@Beemère: Avec la Convention que la semaine commence dimanche qui ne fonctionnerait pas.
@HANK; Oui ça le ferait. OP peut vouloir récupérer le dimanche qui commence la semaine du mardi. Toute logique est possible tant que nous ne savons pas ce qu'ils veulent exactement. Vérifiez la réponse ci-dessous à l'affiche "Lumière" qui le fait.
@Henk je voulais dire entre lundi et dimanche.
@Lisa: Je pensais que les dates sont également synonymes de définitions et de conventions dépendantes de la culture. Cela paie pour être clair.