Alex Rivera | Logout

Calculate week of month in .NET

Asked 2010-01-25T23:26:19.590
48

Do the .NET libraries have an easy way of returning the week number for a given date? For example, input of Year = 2010, Month = 1, Day = 25, should output 5 for the week number.

Closest I found was Calendar.GetWeekOfYear, which is almost there.

Java has a date string format "W" which returns week in month but I can't see anything equivalent in .NET.

Edit
Report

1 Answer

24

There is no direct built-in way to do this, but it can be done quite easily. Here is an extension method which can be used to easily get the year-based week number of a date:

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

We can then use that to calculate the month-based week number, kind of like Jason shows. A culture friendly version could look something like this:

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.
}
answered 2010-01-26T07:52:41.023

Your Answer