Beispiel #1
0
        public static bool VerificarSeDiaUtil(DateTime data, Calendarios.PaisEnum pais, int tipoCalendario)
        {
            var ListaDeFeriados = Calendarios.Calendario.ObterListaDeFeriados(data.Year, pais, tipoCalendario);

            if (VerificarSeFinalDeSemana(data))
            {
                return(false);
            }
            else
            {
                foreach (var feriado in ListaDeFeriados)
                {
                    if (data.Day == feriado.Dia && data.Month == feriado.Mes)
                    {
                        return(false);
                    }
                }
                return(true);
            }
        }
Beispiel #2
0
        public static int CalcularDiasUteisEntreDatas(DateTime dataInicio, DateTime dataFim, Calendarios.PaisEnum pais, int calendario, bool incluirPrimeiroDia = true, bool incluirUltimoDia = false)
        {
            int numeroDeDiasUteis = 0;

            if (dataInicio != dataFim)
            {
                //Determina a data inicial independentemente da ordem inserida pelo usuário
                DateTime dataInicioAnalise = (dataInicio < dataFim ? dataInicio : dataFim);

                //Determina a data final independentemente da ordem inserida pelo usuário
                DateTime dataFimAnalise = (dataInicio < dataFim ? dataFim : dataInicio);

                while (dataInicioAnalise.Date < dataFimAnalise.Date)
                {
                    if (VerificarSeDiaUtil(dataInicioAnalise, pais, calendario))
                    {
                        ++numeroDeDiasUteis;
                    }

                    dataInicioAnalise = dataInicioAnalise.AddDays(1);
                }

                //Verifica se o último dia também é um dia útil
                if (VerificarSeDiaUtil(dataFimAnalise, pais, calendario))
                {
                    ++numeroDeDiasUteis;
                }

                //Verifica se o primeiro dia útil deve ser incluído na contagem
                if (VerificarSeDiaUtil(dataInicioAnalise, pais, calendario) && !incluirPrimeiroDia)
                {
                    numeroDeDiasUteis--;
                }

                //Verifica se o último dia útil deve ser incluído na contagem
                if (VerificarSeDiaUtil(dataFimAnalise, pais, calendario) && !incluirUltimoDia)
                {
                    numeroDeDiasUteis--;
                }
            }
            else if (incluirPrimeiroDia && incluirUltimoDia && VerificarSeDiaUtil(dataInicio, pais, calendario))
            {
                numeroDeDiasUteis = 1;
            }

            return(dataInicio > dataFim ? -numeroDeDiasUteis : numeroDeDiasUteis);
        }
Beispiel #3
0
        public static int CalcularDiasUteisTop(DateTime dataInicio, DateTime dataFim, Calendarios.PaisEnum pais, int tipoCalendario, bool incluirPrimeiroDia = true, bool incluirUltimoDia = false)
        {
            int numeroDeDiasUteis = 0;

            if (dataInicio != dataFim)
            {
                DateTime dataInicioAnalise = (dataInicio < dataFim ? dataInicio : dataFim);
                DateTime dataFimAnalise    = (dataInicio < dataFim ? dataFim : dataInicio);

                int diferencaEmAnos = dataFimAnalise.Year - dataInicioAnalise.Year;
                int quantidadeDeFeriadosEmDiasUteis = 0;

                Parallel.For(0, diferencaEmAnos, i =>
                {
                    var ListaDeFeriados = Calendarios.Calendario.ObterListaDeFeriados(dataInicioAnalise.Year + i, pais, tipoCalendario);
                    foreach (var feriado in ListaDeFeriados)
                    {
                        var diaDeFeriado = new DateTime(dataInicioAnalise.Year + i, feriado.Mes, feriado.Dia);
                        if (diaDeFeriado.ToOADate() >= dataInicioAnalise.ToOADate() && diaDeFeriado.ToOADate() <= dataFimAnalise.ToOADate())
                        {
                            if (VerificarSeFinalDeSemana(diaDeFeriado) == false)
                            {
                                quantidadeDeFeriadosEmDiasUteis++;
                            }
                        }
                    }
                });

                numeroDeDiasUteis = dataFimAnalise.Subtract(dataInicioAnalise).Days - quantidadeDeFeriadosEmDiasUteis - CalcularQuantidadeDeSabadosEDomingosEntreDatas(dataInicioAnalise, dataFimAnalise) + 1;

                //Verifica se o primeiro dia útil deve ser incluído na contagem
                if (VerificarSeDiaUtil(dataInicioAnalise, pais, tipoCalendario) && !incluirPrimeiroDia)
                {
                    numeroDeDiasUteis--;
                }

                //Verifica se o último dia útil deve ser incluído na contagem
                if (VerificarSeDiaUtil(dataFimAnalise, pais, tipoCalendario) && !incluirUltimoDia)
                {
                    numeroDeDiasUteis--;
                }
            }
            else if (incluirPrimeiroDia && incluirUltimoDia && VerificarSeDiaUtil(dataInicio, pais, tipoCalendario))
            {
                numeroDeDiasUteis = 1;
            }

            return(dataInicio > dataFim ? -numeroDeDiasUteis : numeroDeDiasUteis);
        }
Beispiel #4
0
 public static DateTime CalcularDataComIntervaloFixoDeDiasUteis(DateTime data, int numeroDiasUteis, Calendarios.PaisEnum pais, int tipoCalendario)
 {
     for (int i = 0; i < numeroDiasUteis; i++)
     {
         while (VerificarSeDiaUtil(data, pais, tipoCalendario) != true)
         {
             data = data.AddDays(1);
         }
         data = data.AddDays(1);
     }
     return(data);
 }