Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / DateTime

DateTime extension method to give Week number

5.00/5 (1 vote)
8 Sep 2011CPOL 10K  
Here another approach taken from my article Time Period Library for .NET[^], which returns addditional the year of the week.// ------------------------------------------------------------------------public enum YearWeekType{ Calendar, Iso8601,} // enum YearWeekType //...
Here another approach taken from my article Time Period Library for .NET[^], which returns addditional the year of the week.
// ------------------------------------------------------------------------
public enum YearWeekType
{
  Calendar,
  Iso8601,
} // enum YearWeekType
  
// ------------------------------------------------------------------------
public static class TimeTool
{

  // ----------------------------------------------------------------------
  public static void GetWeekOfYear( DateTime moment, YearWeekType yearWeekType,
    out int year, out int weekOfYear )
  {
    GetWeekOfYear( moment, Thread.CurrentThread.CurrentCulture, yearWeekType, out year, out weekOfYear );
  } // GetWeekOfYear

  // ----------------------------------------------------------------------
  public static void GetWeekOfYear( DateTime moment, CultureInfo culture, YearWeekType yearWeekType,
    out int year, out int weekOfYear )
  {
    GetWeekOfYear( moment, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType,
      out year, out weekOfYear );
  } // GetWeekOfYear

  // ----------------------------------------------------------------------
  public static void GetWeekOfYear( DateTime moment, CultureInfo culture,
    CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType, out int year, out int weekOfYear )
  {
    if ( culture == null )
    {
      throw new ArgumentNullException( "culture" );
    }

    if ( yearWeekType == YearWeekType.Iso8601 && weekRule == CalendarWeekRule.FirstFourDayWeek && firstDayOfWeek == DayOfWeek.Monday )
    {
      DayOfWeek day = culture.Calendar.GetDayOfWeek( moment );
      if ( day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday )
      {
        moment = moment.AddDays( 3 );
      }
    }

    weekOfYear = culture.Calendar.GetWeekOfYear( moment, weekRule, firstDayOfWeek );
    year = moment.Year;
    if ( weekOfYear >= 52 && moment.Month < 12 )
    {
      year--;
    }
  } // GetWeekOfYear

} // class TimeTool

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)