Ottieni intervallo di date per settimana numero c #

Possibile duplicato:
In .net, conoscendo il numero della settimana come posso ottenere la data dei giorni feriali?

Ciao,

Ho una domanda per te. Come ottengo l’intervallo di date di un dato numero di settimana.

Ad esempio: se inserisco la settimana 12 l’output dovrebbe essere:

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

Spero davvero che voi ragazzi potete darmi una mano, non posso trovare la capanna da nessuna parte!

Grazie in anticipo.

Nota

Mi sembra di aver sbagliato bug. Il codice attuale è stato aggiornato dal 2012-01-30 per tenere conto di questo fatto e ora daysOffset i daysOffset basati su Martedì, che secondo Mikael Svenson sembra risolvere il problema.

Questi calcoli della data della settimana ISO8601 sono un po ‘confusi, ma è così che lo fai:

 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; 

In pratica si calcola un punto di riferimento, quindi si aggiungono giorni, la parte più difficile riguarda il fatto che a volte la settimana 53 può verificarsi a gennaio e la settimana 1 a volte può verificarsi a dicembre. È necessario adattarsi per questo e questo è un modo per farlo.

Il codice sopra riportato calcola la data di un anno (aaaa) e il numero della settimana (ww) e il giorno della settimana (d).

  • Scopri quale giorno della settimana è stato il primo gennaio dell’anno (ad esempio nel 2011 era sabato)
  • Aggiungi il conteggio dei giorni necessario per diventare il prossimo lunedì (2 giorni)
  • Da questo giorno in poi, aggiungi (Numero di settimane – 1) * 7 giorni per ottenere il primo giorno della settimana a cui sei interessato: -Display questo giorno più i prossimi giorni per ottenere l’intera settimana

Qualcosa come questo dovrebbe fare il trucco

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