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 ledaysOffset
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).
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); }