public static void Main()
Console.WriteLine("DateTime1");
DateTime startDate = DateTime.MinValue;
Console.WriteLine("***** TEST CASE # 1: Start Date is on Monday *****");
startDate = new DateTime(2024, 6, 3);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 2: Start Date is on Tuesday *****");
startDate = new DateTime(2024, 6, 4);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 3: Start Date is on Wednesday *****");
startDate = new DateTime(2024, 6, 5);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 4: Start Date is on Thursday *****");
startDate = new DateTime(2024, 6, 6);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 5: Start Date is on Friday *****");
startDate = new DateTime(2024, 6, 7);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 6: Start Date is on Saturday *****");
startDate = new DateTime(2024, 6, 8);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
Console.WriteLine("***** TEST CASE # 7: Start Date is on Sunday *****");
startDate = new DateTime(2024, 6, 9);
CalculateTargetDate(startDate, DayOfWeek.Monday);
CalculateTargetDate(startDate, DayOfWeek.Tuesday);
CalculateTargetDate(startDate, DayOfWeek.Wednesday);
CalculateTargetDate(startDate, DayOfWeek.Thursday);
CalculateTargetDate(startDate, DayOfWeek.Friday);
CalculateTargetDate(startDate, DayOfWeek.Saturday);
CalculateTargetDate(startDate, DayOfWeek.Sunday);
private static void CalculateTargetDate(DateTime startDate, DayOfWeek targetDateDayOfWeek)
Console.WriteLine("--->");
Console.WriteLine("Arguments: startDate={0}, targetDateDayOfWeek={1}", startDate, targetDateDayOfWeek);
Console.WriteLine("startDate.DayOfWeek={0}", startDate.DayOfWeek);
int diff = (7 + (startDate.DayOfWeek - targetDateDayOfWeek)) % 7;
Console.WriteLine("diff={0}", diff);
DateTime targetDate = startDate.AddDays((-1 * diff) + (diff == 0 ? 0 : 7)).Date;
Console.WriteLine("targetDate={0}", targetDate);