Non esiste un modo incorporato diretto per eseguire questa operazione, ma può essere fatto abbastanza facilmente. Qui è un metodo di estensione che può essere usato per ottenere facilmente il numero della settimana a base di anno di una data:
public static int GetWeekNumber(this DateTime date)
{
return GetWeekNumber(date, CultureInfo.CurrentCulture);
}
public static int GetWeekNumber(this DateTime date, CultureInfo culture)
{
return culture.Calendar.GetWeekOfYear(date,
culture.DateTimeFormat.CalendarWeekRule,
culture.DateTimeFormat.FirstDayOfWeek);
}
Possiamo quindi utilizzare tale per calcolare il numero Mese-based, un po 'come Jason shows. Una versione cultura amichevole potrebbe somigliare a questo:
public static int GetWeekNumberOfMonth(this DateTime date)
{
return GetWeekNumberOfMonth(date, CultureInfo.CurrentCulture);
}
public static int GetWeekNumberOfMonth(this DateTime date, CultureInfo culture)
{
return date.GetWeekNumber(culture)
- new DateTime(date.Year, date.Month, 1).GetWeekNumber(culture)
+ 1; // Or skip +1 if you want the first week to be 0.
}
Questo non è corretto; restituisce '-48' per' dt = new DateTime (2010, 1, 25) '. – jason
@Jason Buona cattura. Il problema era il primo giorno di gennaio che apparteneva all'ultima settimana di dicembre. Risolto il problema per ignorarlo. – GaussZ