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?
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.
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.
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.
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);
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]
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!
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]