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

16 respostas
yuriads

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?

16 Respostas

zoren

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

gpd38

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

yuriads

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

P

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

Porfavor coloque [RESOLVIDO] no titulo do seu topico.

W

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.

andredemelo

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

andredemelo

Pode ser feito dessa forma

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);
W

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.

andredemelo

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

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

W

blz… pode deixar.

andredemelo

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!

W

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:

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);
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.

andredemelo

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!

W

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

andredemelo

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

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 */
danvsantos

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

}
Criado 2 de novembro de 2009
Ultima resposta 22 de jun. de 2015
Respostas 16
Participantes 7