Click here to Skip to main content
15,881,803 members
Articles / DateTime
Alternative
Tip/Trick

DateTime extension method to give Week number

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
8 Sep 2011CPOL 9.5K   1   2
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)


Written By
Software Developer (Senior)
Switzerland Switzerland
👨 Senior .NET Software Engineer

🚀 My Open Source Projects
- Time Period Library 👉 GitHub
- Payroll Engine 👉 GitHub

Feedback and contributions are welcome.



Comments and Discussions

 
General+5 - Your time period lib is a seminal piece of work I would... Pin
Reiss8-Sep-11 4:55
professionalReiss8-Sep-11 4:55 
+5 - Your time period lib is a seminal piece of work I would recomend to anyone
GeneralRe: Many thanks :) Pin
Jani Giannoudis8-Sep-11 5:08
Jani Giannoudis8-Sep-11 5:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.