Hoje é dia 29 de Março, eu queria que alguma coisa me retorna-se o primeiro dia da semana (25 de Março) e o último dia da semana (31 de março), considerando que Domingo é o primeiro dia e Sábado é o último.
Obrigada!
Hoje é dia 29 de Março, eu queria que alguma coisa me retorna-se o primeiro dia da semana (25 de Março) e o último dia da semana (31 de março), considerando que Domingo é o primeiro dia e Sábado é o último.
Obrigada!
Esse é o problema da classe Calendar… nem ela, nem GregorianCalendar foram feitas para facilitar sua vida.
Vai ter que fazer continha:
[code]
public class Datas {
private static void eraseTime(Calendar cal)
{
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
}
public static void main(String[] args) {
final long millisPorDia = 1000 * 60 * 60 * 24;
Calendar cal = Calendar.getInstance();
int diaDaSemana = cal.get(Calendar.DAY_OF_WEEK);
long time = cal.getTimeInMillis();
//Calculo do primeiro dia da semana
long primeiroDiaDaSemana = time - ((diaDaSemana - Calendar.SUNDAY) * millisPorDia);
Calendar primeiroDia = Calendar.getInstance();
primeiroDia.setTimeInMillis(primeiroDiaDaSemana);
eraseTime(primeiroDia);
System.out.println("Primeiro dia da semana: " + primeiroDia.get(Calendar.DAY_OF_MONTH) + "/" + (primeiroDia.get(Calendar.MONTH)+1));
//Calculo do último dia da semana
long ultimoDiaDaSemana = time + ((Calendar.SATURDAY - diaDaSemana) * millisPorDia);
Calendar ultimoDia = Calendar.getInstance();
ultimoDia.setTimeInMillis(ultimoDiaDaSemana);
eraseTime(ultimoDia);
System.out.println("Último dia da semana: " + ultimoDia.get(Calendar.DAY_OF_MONTH) + "/" + (ultimoDia.get(Calendar.MONTH)+1));
}
}[/code]
Obrigada! Sabia que ia ser trabalhoso, estava tentando mil coisas mas nada funcionava… obrigada mesmo!!
Pois é, esse assunto de datas é tão encardido que tem até uma API para isso, chamada JODA. O pessoal dessa API está até propondo uma JSR, pra ver se torna oficial classes mais digeríveis de calendário.
PS: Atualizei o código ali em cima. De diferente, só adicionei um método para zerar o horário e separei o cálculo do primeiro do último dia.
O problema é o seguinte, no Calendar os meses começam a ser contados do 0… e eu preciso que março seja 3 e não 2. Tentei muita coisa, mas quando você manda o calendar somar + 1 no mês, ele soma literalmente um mês e não uma unidade. Ai é uma melca…
Estou olhando este JODA, lá tem um método bonito chamado plusWeek(). mas eu não sei como eu acho o 1 dia da semana, porque ai é só usar este plusWeek() para achar o último…
O que você usa internamente no sistema não precisa ser o que o seu usuário vê… também acho estranha essa implementação para os meses, mas nada que um pouquinho de +1 e -1 na interface gráfica não resolva.
Para somar uma data no calendário, basicamente converta o tempo dele para millis e depois adicione o número de milisegundos dos dias que você quer calcular. Foi mais ou menos o que fiz no programa anterior…
Por exemplo:
public static void somaDias(Calendar cal, int dias) {
final long millisPorDia = 1000 * 60 * 60 * 24;
long time = cal.getTimeInMillis();
time += dias * millisPorDia;
cal.setTimeInMillis(time);
}
Aqui não usamos a JODA. Já haviamos criado nossa classe estática (argh) para manipular calendários antes de conhecer a framework. De coisas para manipular calendário usamos o JCalendar, para as GUIs em Swing.
mas eu estou mandando para o banco… eu tenho que tentar com o Joda mesmo, que parece mais plausível.