using System.Collections.Generic;
public static void Main()
var cicloQuinzenal = new Ciclo
TipoIntervalo = EnumTipoIntervalo.Mes,
, new DateTime(2022, 4, 16)
public static void testeCiclo(int diaReferencia, DateTime hoje, Ciclo ciclo)
var mesAnterior = new DateTime(hoje.Year, hoje.Month, 1).AddMonths(-1);
var diasNoMes = DateTime.DaysInMonth(mesAnterior.Year, mesAnterior.Month);
switch (ciclo.TipoIntervalo) {
case EnumTipoIntervalo.Dia:
case EnumTipoIntervalo.Mes:
if (ciclo.Divisor.Value > 0) {
var diasSoma = (int)ciclo.TipoIntervalo / ciclo.Divisor.Value;
var diasVerificacao = new List<int>();
var dataLoop = new DateTime(mesAnterior.Year, mesAnterior.Month, diaReferencia);
while (dataLoop < hoje) {
diasVerificacao.Add(dataLoop.Day);
dataLoop = dataLoop.AddDays(diasSoma);
Console.WriteLine(hoje.ToString() + " - " + diaReferencia + " -> " + (diasVerificacao.Contains(hoje.Day) ? "Fechar" : "Não fechar"));
case EnumTipoIntervalo.Ano:
public static void testDate2(int diaReferencia, DateTime hoje)
var mesAnterior = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddMonths(-1);
if (DateTime.DaysInMonth(mesAnterior.Year, mesAnterior.Month) == diaReferencia && hoje.Day == 1)
data1 = new DateTime(mesAnterior.Year, mesAnterior.Month, diaReferencia).AddDays(1);
data1 = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddDays(1);
var data2 = mesAnterior.AddDays(16);
Console.WriteLine(hoje.ToString() + " - " + data1.ToString() + " - " + data2.ToString() + " -> " + (data1 == hoje || data2 == hoje ? "Fechar" : "Não fechar"));
public static void testDate3(int diaReferencia, DateTime hoje)
var mesAnterior = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddMonths(-1);
if (DateTime.DaysInMonth(mesAnterior.Year, mesAnterior.Month) == diaReferencia && hoje.Day == 1)
data1 = new DateTime(mesAnterior.Year, mesAnterior.Month, diaReferencia).AddDays(1);
data1 = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddDays(1);
Console.WriteLine(hoje.ToString() + " - " + data1.ToString() + " -> " + (data1 == hoje ? "Fechar" : "Não fechar"));
public static void testDate4(int diaReferencia, DateTime hoje)
var mesAnterior = new DateTime(hoje.Year, hoje.Month, 1).AddMonths(-1);
var diasNoMes = DateTime.DaysInMonth(mesAnterior.Year, mesAnterior.Month);
Console.WriteLine(hoje.ToString() + " - " + diaReferencia + " - " + (1 + ((diaReferencia + 15) % diasNoMes)) + " -> " + (diaReferencia == hoje.AddDays(-1).Day || 1 + ((diaReferencia + 14) % diasNoMes) == hoje.AddDays(-1).Day ? "Fechar" : "Não fechar"));
public static void testDate5(int diaReferencia, DateTime hoje)
var mesAnterior = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddMonths(-1);
if (DateTime.DaysInMonth(mesAnterior.Year, mesAnterior.Month) == diaReferencia && hoje.Day == 1)
data1 = new DateTime(mesAnterior.Year, mesAnterior.Month, diaReferencia).AddDays(1);
data1 = new DateTime(hoje.Year, hoje.Month, diaReferencia).AddDays(1);
Console.WriteLine(hoje.ToString() + " - " + data1.ToString() + " -> " + (data1 == hoje ? "Fechar" : "Não fechar"));
public EnumTipoIntervalo TipoIntervalo;
public enum EnumTipoIntervalo {