using System.Globalization;
public static void Main()
DateTime date = new DateTime(2016, 01, 3);
CultureInfo myCI = new CultureInfo("pt-PT");
Calendar myCal = myCI.Calendar;
CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
myCWR = CalendarWeekRule.FirstFullWeek;
myFirstDOW = DayOfWeek.Sunday;
long weekOfWearOfDate = myCal.GetWeekOfYear(date, myCWR, myFirstDOW);
long weekOfWearOfStartOfMonthDate = myCal.GetWeekOfYear(new DateTime(date.Year, date.Month, 1), myCWR, myFirstDOW);
weekOfTheMonth = weekOfWearOfDate - weekOfWearOfStartOfMonthDate + 1;
Console.WriteLine("The week of the month for {0} is {1}.", date.ToShortDateString(), weekOfTheMonth);
DateTime LastDay = new System.DateTime(date.Year, 12, 31);
Console.WriteLine("There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
Console.WriteLine("The week of the month for {0} is {1}.", date.ToShortDateString(), CalculateMonthWeekFirstDay(date, myFirstDOW, myCal));
private static int CalculateMonthWeekFirstDay(DateTime dt, DayOfWeek firstDay, Calendar cal)
int weekOfYear = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, firstDay);
if (dt.Month == 1 && weekOfYear > 50)
DateTime firstDayOfDecember = new DateTime(dt.Year - 1, 12, 1);
DateTime weekOfDecember = dt.AddDays(-7);
return cal.GetWeekOfYear(weekOfDecember, CalendarWeekRule.FirstDay, firstDay) - cal.GetWeekOfYear(firstDayOfDecember, CalendarWeekRule.FirstDay, firstDay) + 1;
DateTime firstDayOfMonth = new DateTime(dt.Year, dt.Month, 1);
return cal.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, firstDay) - cal.GetWeekOfYear(firstDayOfMonth, CalendarWeekRule.FirstDay, firstDay) + 1;