using System.Globalization;
public static void Main()
Console.WriteLine("Hello World");
System.Globalization.ISOWeek.GetWeeksInYear(2004);
for (var y = 2000; y < 2031; y++)
var weeksInYear = System.Globalization.ISOWeek.GetWeeksInYear(y);
DateTime dt = new DateTime(y, 12, 31);
int week = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
var dateOfLastMonday = ISOWeek.ToDateTime(y, weeksInYear, System.DayOfWeek.Monday);
var dateOfFirstMonday = ISOWeek.ToDateTime(y, 1, System.DayOfWeek.Monday);
Console.WriteLine($"{y} : {weeksInYear} .NET5 weeks - {Program.weeks(y)} manual weeks - date of first and last Monday = {dateOfFirstMonday:dd-MM-yyyy} - {dateOfLastMonday:dd-MM-yyyy}");
public static int weeks(int year)
Func<int, int> p = y => (y + y / 4 - y / 100 + y / 400) % 7;
return p(year) == 4 || p(year - 1) == 3 ? 53 : 52;