Feras fiz este algoritmo que pega o primeiro dia do mês e o ultimo dia dia do mês da data atual
como que eu faço para pegar o primeiro dia do mês anterior e ultimo dia do mês anterior baseado na data atual ?
public static void main(String args[]) throws ParseException {
SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
String dataDoDia = sd.format(new Date());
Date data = null;
data = sd.parse(dataDoDia);
cal.setTime(data);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
final Date primeiroDia = new Date(cal.getTimeInMillis());
String primeiro = sd.format(primeiroDia);
System.out.println("Primeiro dia Mes Atual: " + primeiro);
cal.set(Calendar.DAY_OF_MONTH , cal.getActualMaximum(Calendar.DAY_OF_MONTH));
final Date ultimoDia = new Date(cal.getTimeInMillis());
String ultimo = sd.format(ultimoDia);
System.out.println("Ultimo dia Mes Atual: " + ultimo);
}
[code] //Volta um mês…
GregorianCalendar cl = new GregorianCalendar();
cl.roll(GregorianCalendar.MONTH, -1);
if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {
cl.roll(GregorianCalendar.YEAR, -1);
}
//Pega o primeiro… sempre 1 não?? =)
/*
* Mas se quiser
* int date = cl.getMinimum(GregorianCalendar.DATE);
* cl.set(GregorianCalendar.DATE, date);
*/
cl.set(GregorianCalendar.DATE, 1);
System.out.println(cl.getTime());
//Pega o último
int date = cl.getMaximum(GregorianCalendar.DATE);
cl.set(GregorianCalendar.DATE, date);
System.out.println(cl.getTime());
[code] //Volta um mês…
GregorianCalendar cl = new GregorianCalendar();
cl.roll(GregorianCalendar.MONTH, -1);
if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {
cl.roll(GregorianCalendar.YEAR, -1);
}
//Pega o primeiro
int date = cl.getMinimum(GregorianCalendar.DATE);
cl.set(GregorianCalendar.DATE, date);
System.out.println(cl.getTime());
//Pega o último
date = cl.getMaximum(GregorianCalendar.DATE);
cl.set(GregorianCalendar.DATE, date);
System.out.println(cl.getTime());[/code]
Esse teste com dezembro é para ver se tem que diminuir um ano tbm…
olha só…
hoje = 03/01/2011
se voltar um mês = 03/12/2011 -> 2011 e tem que ser 2010
então volta um ano tbm…
No calendar… qualquer um… se trabalha com os “tempos” separados, mês, dia, ano, horas… e assim vai…
para cada um pode aumentar ou diminuir…
Se quiser ir para o dia 15/03/2011
No começo do seu código pode fazer isso… logo após instanciar ou na própria instancia mesmo tem os parametros… e depois segue o mesmo código…
estou testando com outras datas porém o ultimo dia do mês anterior esta vindo errado o codigo e o que esta abaixo
//Volta um mês...
GregorianCalendar cl = new GregorianCalendar();
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date dataDigitada = (Date)formatter.parse("15/03/2011");
cl.setTime(dataDigitada);
cl.roll(GregorianCalendar.MONTH, -1);
if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {
cl.roll(GregorianCalendar.YEAR, -1);
}
//Pega o primeiro
int date = cl.getMinimum(GregorianCalendar.DATE);
cl.set(GregorianCalendar.DATE, date);
Date primeiroDia = cl.getTime();
System.out.println("Primeiro dia: " + formatter.format(primeiroDia));
//Pega o último
date = cl.getMaximum(GregorianCalendar.DATE);
cl.set(GregorianCalendar.DATE, date);
Date ultimoDia = cl.getTime();
System.out.println("Ultimo dia: " + formatter.format(ultimoDia));