using System.Collections.Generic;
private static Dictionary<int, int> _startQuarterMonthes = new Dictionary<int, int>
private static Dictionary<int, int> _endQuarterMonthes = new Dictionary<int, int>
private static Dictionary<int, int> _quarterByMonth = new Dictionary<int, int>
public static void Main()
new DateTime(2020, 1, 1),
new DateTime(2020, 3, 1),
new DateTime(2020, 4, 1),
new DateTime(2020, 6, 1),
new DateTime(2020, 7, 1),
new DateTime(2020, 9, 1),
new DateTime(2020, 10, 1),
new DateTime(2020, 12, 1)
foreach(var date in dates)
var quarter = Quarter(date.Month);
var start = GetStartOfQuarter(quarter, year);
var end = GetEndOfQuarter(quarter, year);
Output(date, quarter, start, end);
private static void Output(DateTime date, int quarter, DateTime start, DateTime end)
Console.WriteLine($"Quarter: {quarter}");
Console.WriteLine($"Quarter start date: {start}");
Console.WriteLine($"Quarter end date: {end}");
Console.WriteLine("------------");
private static int Quarter(int month)
return _quarterByMonth[month];
private static DateTime GetStartOfQuarter(int quarter, int year)
return new DateTime(year, _startQuarterMonthes[quarter], 1);
private static DateTime GetEndOfQuarter(int quarter, int year)
var month = _endQuarterMonthes[quarter];
return new DateTime(year, month, DateTime.DaysInMonth(year, month));