Obtenir la plage de dates par le numéro de semaine c #

Dupliquer possible:
En .net, connaissant le numéro de semaine, comment puis-je obtenir la date du jour de la semaine?

Bonjour,

J’ai une question pour toi. Comment puis-je obtenir la plage de dates d’un numéro de semaine donné.

Par exemple: si j’entre la semaine 12, le résultat devrait être:

21-03-2011 22-03-2011 23-03-2011 24-03-2011 25-03-2011 26-03-2011 27-03-2011 

J’espère vraiment que vous pourrez m’aider, je n’arrive pas à trouver le store n’importe où!

Merci d’avance.

Remarque

Il semble que j’ai raté un bogue. Le code actuel a été mis à jour à compter du 2012-01-30 pour tenir compte de ce fait et nous daysOffset maintenant le daysOffset basé sur mardi qui, selon Mikael Svenson, semble résoudre le problème.

Ces calculs de date de semaine ISO8601 sont un peu loufoques, mais voici comment vous procédez:

 DateTime jan1 = new DateTime(yyyy, 1, 1); int daysOffset = DayOfWeek.Tuesday - jan1.DayOfWeek; DateTime firstMonday = jan1.AddDays(daysOffset); var cal = CultureInfo.CurrentCulture.Calendar; int firstWeek = cal.GetWeekOfYear(jan1, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); var weekNum = ww; if (firstWeek <= 1) { weekNum -= 1; } var result = firstMonday.AddDays(weekNum * 7 + d - 1); return result; 

Fondamentalement, calculez un sharepoint référence, puis ajoutez des jours, ce qui est difficile, c'est que la semaine 53 peut parfois se produire en janvier et que la semaine 1 peut parfois se dérouler en décembre. Vous devez vous adapter à cela et c'est une façon de le faire.

Le code ci-dessus calcule la date d'une année (aaaa), le numéro de semaine (ww) et le jour de la semaine (j).

  • Découvrez quel jour de la semaine était le premier janvier de l’année (par exemple, c’était samedi)
  • Ajouter le nombre de jours nécessaire pour devenir le prochain lundi (2 jours)
  • À partir de ce jour, ajoutez (Nombre de semaines – 1) * 7 jours pour obtenir le premier jour de la semaine qui vous intéresse -Affichez ce jour ainsi que les prochains jours pour obtenir la semaine entière

Quelque chose comme ça devrait faire l’affaire

  DateTime d = new DateTime(someYear, 1, 1); d.AddDays(numWeeks * 7); for (int x = 0; x < 7; x++) { Console.WriteLine(d.ToShortDateString()); d.AddDays(1); }