[RESOLVIDO] Como saber todos os dias da semana de um determinado mês

Bem galera, meu problema é o seguinte:

De posse de um mês, necessito saber quais os dias específicos. Por exemplo, se eu escolho o mês de novembro de 2009, quais são todos os domingos? Resposta deverá ser: 1, 8, 15, 22, 29.

Alguém tem alguma idéia de como eu posso fazer isso?

Se eu não me engano, usando um calendar vc consegue saber qual é o dia da semana daquele mês

ai é só percorrer os dias

ou então vc faz uma conta e calcula os dias

Concordo com o ZOREN. Use o calendar.
Tem outros meios, mas podem te dar um pouco mais de trabalho.

Este é muito interessante, mas é manualmente:
http://www.parolima.com/home17.htm

Wikipedia-Calendar:
http://en.wikipedia.org/wiki/Perpetual_calendar

Este teste foi extraido de uma resposta que estava no yahoo.

Use a tabela:

Mês 1 2 3 4 5 6 7 8 9 10 11 12
cód 0 3 3 6 1 4 6 2 5 0 3 5

ex.: 15/2/2006

faça a soma:

(ano) = 2006 + 
(parte inteira de 2006/4) = 501 + 
(codigo da tabela para o mês) = 3+
(dia) = 15 +
(se o ano é bissexto e o mês é jan ou fev, subtraia 1) = 0 

(ajustar) = resultado - 2 = 2525 - 2

O dia da semana é o resto da divisão por 7 = 3, com zero sendo o domingo, logo 15/2/2006 foi uma quarta.

Referencia: http://br.answers.yahoo.com/question/index?qid=20070423164331AAIm0gU

Calendar-APIJava:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html

Valeu galera, muitíssimo obrigado pelas dicas.

Eu utilizei o GregorianCalendar mesmo. Ele tem um método [ calendar.get(Calendar.DAY_OF_WEEK) ] que me retorna um inteiro, que corresponde ao dia da semana (1-domingo, 2-segunda, …), daí eu verifico o que eu quero.

Valeu!!!

Isso ae com o calendar voce consegue tudo. Ate dia do ano.

Porfavor coloque [RESOLVIDO] no titulo do seu topico.

Galera! acabei de chegar no GUJ e sou iniciante no JAVA, primeiramente quero dar parabens ao guj e a galera do forun, já me ajudaram muito em alguns probleminhas… mas voltando a duvida quero saber como faço pra pegar as datas da semana de segunda a sexta tipo:

01 semana
01/10/2010 - 01/10/2010 -

02 semana
04/10/2010 - 08/10/2010

03 semana
18/10/2010 - 22/10/2010

E assim por diante.

Alguem pode me ajudar… estou fazendo um programa de consulta, estou precisando dessa solução.

Como dito la encima pelo yuriads e pelo zoren, use o Use o calendar!!
Isso te ajudará!

Pode ser feito dessa forma

[code]GregorianCalendar c = new GregorianCalendar();

c.setTime(new Date(“05/01/2003”));

//pega o primeiro dia da semana

int diaInic = c.getFirstDayOfWeek();

//soma o numero de dias

int diaFim = c.add(c.DATE, 7); [/code]

Fala andre, Desculpa cara, mas não consegui falzer com seu ultimo exemplo, eu conseigo pegar o primeiro e ultimo dia do mes, abaixo o código:

    Calendar dataAtual = Calendar.getInstance();
    Calendar primeiroDia = Calendar.getInstance();
    Calendar ultimoDia = Calendar.getInstance();

    //1º dia do mês atual
    primeiroDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));
    primeiroDia.add(Calendar.DAY_OF_YEAR, 1);

    String primeirodia = dataAtualGregorianCalendar(primeiroDia.getTime());
    Date dprimeirodia = sdf.parse(primeirodia);        

    System.out.println(dataAtualGregorianCalendar(primeiroDia.getTime()));

    //Ultimo dia do mês atual

    ultimoDia.add(Calendar.MONTH, 1);
    ultimoDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));

    String ultimodia = dataAtualGregorianCalendar(ultimoDia.getTime());

    System.out.println(dataAtualGregorianCalendar(ultimoDia.getTime()));

    
    //==----------------------
    System.out.println("o primeiro dia é :"+primeirodia+" o ultimo dia é: "+ultimodia);

Tambem consigo pegar a data de segunda e sexta da semana corrente, porém não consigo de todas as semanas, abaixo o codigo

private static Date resolvePrimeiroUltimo(Date data, boolean isPrimeiro) {

    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(data);
    if (isPrimeiro) {
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    } else {
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
    }
    return calendar.getTime();



    Date date = new Date();

    Date primeiro = resolvePrimeiroUltimo(date, true);
    String sprimeiro = dataAtualGregorianCalendar(primeiro);
    Date ultimo = resolvePrimeiroUltimo(date, false);
    String sultimo = dataAtualGregorianCalendar(ultimo);
    System.out.println(sprimeiro + " - " + sultimo);

Se poderes me ajudar te agradeço muito.

Willian, utiliza as tags Code, para que seu código fique de uma forma mais fácil de ser visualizada, dessa forma!

[quote=WILLIAN BALDEZ]Fala andre, Desculpa cara, mas não consegui falzer com seu ultimo exemplo, eu conseigo pegar o primeiro e ultimo dia do mes, abaixo o código:

    [code]Calendar dataAtual = Calendar.getInstance();
    Calendar primeiroDia = Calendar.getInstance();
    Calendar ultimoDia = Calendar.getInstance();

    //1º dia do mês atual
    primeiroDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));
    primeiroDia.add(Calendar.DAY_OF_YEAR, 1);

    String primeirodia = dataAtualGregorianCalendar(primeiroDia.getTime());
    Date dprimeirodia = sdf.parse(primeirodia);        

    System.out.println(dataAtualGregorianCalendar(primeiroDia.getTime()));

    //Ultimo dia do mês atual

    ultimoDia.add(Calendar.MONTH, 1);
    ultimoDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));

    String ultimodia = dataAtualGregorianCalendar(ultimoDia.getTime());

    System.out.println(dataAtualGregorianCalendar(ultimoDia.getTime()));

    
    //==----------------------
    System.out.println("o primeiro dia é :"+primeirodia+" o ultimo dia é: "+ultimodia);[/code]

Tambem consigo pegar a data de segunda e sexta da semana corrente, porém não consigo de todas as semanas, abaixo o codigo

[code]private static Date resolvePrimeiroUltimo(Date data, boolean isPrimeiro) {

    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(data);
    if (isPrimeiro) {
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    } else {
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
    }
    return calendar.getTime();



    Date date = new Date();

    Date primeiro = resolvePrimeiroUltimo(date, true);
    String sprimeiro = dataAtualGregorianCalendar(primeiro);
    Date ultimo = resolvePrimeiroUltimo(date, false);
    String sultimo = dataAtualGregorianCalendar(ultimo);
    System.out.println(sprimeiro + " - " + sultimo);[/code]

Se poderes me ajudar te agradeço muito.[/quote]

blz… pode deixar.

Willian,

E se você colocar um laço no seu último exemplo, que você pega a semana atual e guardar a cada vez que ele executar o laço os dias em um array, depois que ele percorrer todas as semanas você pede para ele mostrar todas as semanas que ele identificou!

Então… Já tentei fazer isso, mas não consegui… fiquei em um loop infinito… :cry:

pq vou ter q fazer assim.

tenho q gravar cada semana em uma variavel diferente,tenho q fazer uma consulta SQL, tipo no exemplo abaixo:

[code]Date date = new Date();

    Date primeiro = resolvePrimeiroUltimo(date, true);
    String sprimeiro = dataAtualGregorianCalendar(primeiro);
    Date ultimo = resolvePrimeiroUltimo(date, false);
    String sultimo = dataAtualGregorianCalendar(ultimo);
    System.out.println(sprimeiro + " - " + sultimo);

[/code]

a proxima semana terá q ser gravada tipo em

"System.out.println(primeirodiasemana02+ " - " + ultimodiasemana02); "

a proxima tera q ser

 "        System.out.println(primeirodiasemana03+ " - " + ultimodiasemana03);   "

mas ainda não consegui… e olha q estou batendo cabeça faz uma semana.

Não me lembro nenhuma outra maneira de fazer o que você quer!
Se você postar o código que fez quando ocorreu o loop infinito, posso tentar te ajudar a encontrar o erro, ou então, uma outra forma de faze-lo chegar ao seu objetivo!

Não tenho mas o código, mas se você tiver uma opção que eu consiga saber os dias da semana, agradeço. se não valeu pela força… vou continuar batalhando… VALEU!!!

Tente fazer desta forma aqui! Será que desta forma resolve seu problema?

[code]GregorianCalendar data = new GregorianCalendar();
data.set(Calendar.YEAR, ano_que_vc_tem);
data.setFirstDayOfWeek(Calendar.SUNDAY);
data.set(Calendar.WEEK_OF_YEAR, numero_da_semana_q_vc_tem);

data.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

/* Agora é só pegar as informações que você quiser sobre o primeiro dia da semana */

data.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
/* Agora é só pegar as informações que você quiser sobre o último dia da semana */ [/code]

Você pode usar esse método. Ex: Junho/2015 resultará em 5 semanas.

private int obterQuantidadeDeSemanasMesAtual() {
Calendar dataBase = Calendar.getInstance();
int ultimoDiaDoMes = dataBase.getActualMaximum(Calendar.DAY_OF_MONTH);
dataBase.set(Calendar.DAY_OF_MONTH, ultimoDiaDoMes);
return dataBase.get(Calendar.WEEK_OF_MONTH);
}