public static void Main()
var date0 = DateTime.Now.AddDays(6);
var date1 = DateTime.Now;
var date2 = DateTime.Now.AddDays(-1);
var date3 = DateTime.Now.AddDays(-2);
var date4 = DateTime.Now.AddDays(-3);
var date5 = DateTime.Now.DayOfYear;
var date6 = 6 - (12 + date5 - (int)date1.DayOfWeek) % 7;
var date7 = 1 + (8 - date6) % 7;
var date8 = DateTime.Now.DayOfWeek;
var weekNumberTest0 = GetFinancialWeekNumber(date0);
var weekNumberTest1 = GetFinancialWeekNumber(date1);
var weekNumberTest2 = GetFinancialWeekNumber(date2);
var weekNumberTest3 = GetFinancialWeekNumber(date3);
var weekNumberTest4 = GetFinancialWeekNumber(date4);
Console.WriteLine(weekNumberTest0 +" "+ date0);
Console.WriteLine(weekNumberTest1 +" "+ date1);
Console.WriteLine(weekNumberTest2 +" "+ date2);
Console.WriteLine(weekNumberTest3 +" "+ date3);
Console.WriteLine(weekNumberTest4 +" "+ date4);
Console.WriteLine("Day of Year:" +" " + date5);
Console.WriteLine("Jan1DayOfWeek:" +" "+ date6);
Console.WriteLine("Start Of First Week:" +" "+ date7);
Console.WriteLine("Day number of Today:" + " " + (int)date8);
public static int GetFinancialWeekNumber(DateTime today)
bool isLeapYear = DateTime.IsLeapYear(today.Year);
int dayOfYear = today.DayOfYear;
DateTime jan1 = new DateTime(today.Year, 1, 1);
int jan1DayOfWeek = (int)jan1.DayOfWeek;
DateTime firstMondayOfNewYear = jan1.AddDays((8 - jan1DayOfWeek) % 7);
DateTime lastDayOfYear = new DateTime(today.Year, 12, 31);
int lastDayOfWeek = (int)lastDayOfYear.DayOfWeek;
if (today >= firstMondayOfNewYear || lastDayOfWeek != 5)
DateTime startOfFirstWeek = jan1.AddDays((8 - jan1DayOfWeek) % 7);
if (today < firstMondayOfNewYear)
int startOfFirstWeekOffset = (8 - jan1DayOfWeek) % 7 + 1;
if (dayOfYear >= startOfFirstWeekOffset)
int adjustment = startOfFirstWeekOffset - 1;
return 1 + (dayOfYear - adjustment - 1) / 7;