public DateTime DataInicial {get; set; }
public DateTime DataFinal {get; set; }
public int ObterIntervaloDias() {
return (DataFinal - DataInicial).Days + 1;
public static DateTime[] CalcularDataConsulta(Periodo periodoAtual) {
int intervaloDias = periodoAtual.ObterIntervaloDias();
DateTime dataInicio = periodoAtual.DataInicial.AddYears(-1);
DateTime dataTemino = dataInicio.AddDays(intervaloDias);
bool mesFevereiro = periodoAtual.DataInicial.Month.Equals(2) && periodoAtual.DataFinal.Month.Equals(2);
bool anoMetaBissexto = DateTime.IsLeapYear(periodoAtual.DataFinal.Year);
bool anoAnteriorBissexto = DateTime.IsLeapYear(dataInicio.Year);
Console.WriteLine("intervalo: " + intervaloDias );
Console.WriteLine("mes: " + mesFevereiro );
Console.WriteLine("b1: " + anoMetaBissexto );
Console.WriteLine("b2: " + anoAnteriorBissexto );
if(intervaloDias == 29 && mesFevereiro && anoMetaBissexto)
dataTemino = dataInicio.AddDays(27);
if(intervaloDias == 28 && mesFevereiro && anoAnteriorBissexto)
dataTemino = dataInicio.AddDays(28);
return new DateTime[] { dataInicio, dataTemino };
public static void Main()
var periodoMeta = new Periodo { DataInicial = DateTime.Parse("2024-02-01"), DataFinal = DateTime.Parse("2024-02-29") };
var periodoConsulta = CalcularDataConsulta(periodoMeta);
DateTime dataInicioConsulta = periodoConsulta[0];
DateTime dataTerminoConsulta = periodoConsulta[1];
Console.WriteLine("DataInicio: " + dataInicioConsulta.ToString("dd/MM/yyyy") );
Console.WriteLine("DataTermino: " + dataTerminoConsulta.ToString("dd/MM/yyyy") );