none
Como obter dias da semana em um intervalo de datas com c# RRS feed

  • Pergunta

  • Olá, estou com o seguinte problema:

    Tenho um formulário onde possui dois campos de data para o usuário digitar neste caso a data inicial e a data final. Sendo assim a partir desse intervalo de datas preciso armazenar em uma lista o inicio da semana (segunda-feira) e o fim da semana (sexta-feira).

    Por exemplo:

    Data Inicial = 01/10/2012

    Data Final = 02/11/2012

    Sei que neste intervalo de datas possui 32 dias de diferença e possui também 5 semanas. Então preciso armazenar as seguintes informações:

    1ª Semana: 01/10/12 a 05/10/2012

    2ª Semana: 08/10/12 a 12/10/2012

    3ª Semana: 15/10/12 a 19/10/2012

    4ª Semana: 22/10/12 a 26/10/2012

    5ª Semana: 29/10/12 a 02/11/2012

    Alguém poderia me ajudar?Obrigado

    quinta-feira, 18 de outubro de 2012 18:12

Respostas

  • Vinicius

    Fiz um esboço aqui, 

    veja se te ajuda

    DateTime DataInicial = new DateTime(2012, 10, 01);
                DateTime DataFinal = new DateTime(2012, 11, 020);
    
                while (DataInicial <= DataFinal)
                {
                    if (DataInicial.DayOfWeek == DayOfWeek.Monday)
                        textBox1.Text += DataInicial.ToString("dd/MM/YYYY");
    
                    if (DataInicial.DayOfWeek == DayOfWeek.Friday)
                        textBox1.Text += " a " + DataInicial.ToString("dd/MM/YYYY") + Environment.NewLine;
    
                    DataInicial = DataInicial.AddDays(1);
                }


    Bruno Viegas D. Ribeiro

    Analista Desenvolvedor de Sistemas
    www.brunoviegas.com.br
     

    • Marcado como Resposta Vinicius_11 quinta-feira, 18 de outubro de 2012 19:13
    quinta-feira, 18 de outubro de 2012 18:34

Todas as Respostas

  • Vinicius

    Fiz um esboço aqui, 

    veja se te ajuda

    DateTime DataInicial = new DateTime(2012, 10, 01);
                DateTime DataFinal = new DateTime(2012, 11, 020);
    
                while (DataInicial <= DataFinal)
                {
                    if (DataInicial.DayOfWeek == DayOfWeek.Monday)
                        textBox1.Text += DataInicial.ToString("dd/MM/YYYY");
    
                    if (DataInicial.DayOfWeek == DayOfWeek.Friday)
                        textBox1.Text += " a " + DataInicial.ToString("dd/MM/YYYY") + Environment.NewLine;
    
                    DataInicial = DataInicial.AddDays(1);
                }


    Bruno Viegas D. Ribeiro

    Analista Desenvolvedor de Sistemas
    www.brunoviegas.com.br
     

    • Marcado como Resposta Vinicius_11 quinta-feira, 18 de outubro de 2012 19:13
    quinta-feira, 18 de outubro de 2012 18:34
  • Vinicius,

    Fiz aqui um "algorítimo" bem bestinha para obter este resultado:

    //Datas de inicio e fim
    DateTime dtInicial = DateTime.Parse("01/10/2012");
    DateTime dtFinal = DateTime.Parse("02/11/2012");
    
    //Data auxiliar para obter todos os dias dentro deste range
    DateTime dtInicialIncremental = dtInicial;
    
    List<DateTime> listaDatas = new List<DateTime>();
    
    //Criando range de datas
    while (dtInicialIncremental <= dtFinal)
    {
        listaDatas.Add(dtInicialIncremental);
        dtInicialIncremental = dtInicialIncremental.AddDays(1);
    }
    
    //Variavel auxiliar para guardar texto pré-formatado
    string textoFormatado = string.Empty;
    
    List<string> resultadoData = new List<string>();
    
    //Motando "de" a "deFim"
    foreach (var dt in listaDatas)
    {
        if (dt == dtInicial)
        {
            textoFormatado += dt.ToString("dd/MM/yyyy") + " a ";
        }
        else if (dt.DayOfWeek == DayOfWeek.Friday)
        {
            textoFormatado += dt.ToString("dd/MM/yyyy");
        }
        else if (dt.DayOfWeek == DayOfWeek.Monday)
        {
            textoFormatado += dt.ToString("dd/MM/yyyy") + " a ";
        }
        else if (dt == dtFinal)
        {
            textoFormatado += dt.ToString("dd/MM/yyyy");
        }
    
        //Verificando se existe uma datafim da semana no texto.
        if (textoFormatado.Length > 13)
        {
            resultadoData.Add(textoFormatado);
            textoFormatado = string.Empty;
        }
    }
    
    //Adicionando semanas contabilizadas
    resultadoData = resultadoData.Select((str, i) => string.Format("{0}º Semana - {1}", i + 1, str)).ToList();

    Resultado obtido:


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Sugerido como Resposta Michelmax1 sexta-feira, 27 de fevereiro de 2015 18:20
    quinta-feira, 18 de outubro de 2012 19:04
  • Bruno testei esse algoritimo e funcionou perfeitamente no que eu queria.

    Muito Obrigado.


    • Editado Vinicius_11 quinta-feira, 18 de outubro de 2012 19:13
    quinta-feira, 18 de outubro de 2012 19:13
  • Vitor esse algoritimo também funcionou é o mesmo propósito mais feito de uma forma diferente.

    Obrigado.

    quinta-feira, 18 de outubro de 2012 19:15