Usuário com melhor resposta
Como obter dias da semana em um intervalo de datas com c#

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
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
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
-
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
-
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
-