Pessoal, se alguém puder me auxiliar.
Estou tentando fazer um processo aqui que é o seguinte.
O usuario entra com um determinado periodo de data.
Por exemplo: 01/01/2010 a 03/03/2010
Dentro deste intervalo preciso separar os intervalos de datas por meses, Exemplo.
1 - Periodo: 01/01/2010 a 31/01/2010
2 - Periodo: 01/02/2010 a 28/02//2010
3 - Periodo: 01/03/2010 a 03/03/2010
Um outro exemplo. Considerando o seguinte periodo inserido pelo usuario. 16/01/2010 a 21/03/2010
1 - Periodo: 16/01/2010 a 31/01/2010
2 - Periodo: 01/02/2010 a 28/02//2010
3 - Periodo: 01/03/2010 a 21/03/2010
E assim por diante, depende do periodo inserido pelo usuario. Considerando os dias bissexto tbm.
Alguém consegue me ajudar?
Obrigado…
https://docs.oracle.com/javase/7/docs/api/java/util/Date.html
Leia a documentação e veja como o month funciona, após entender isso é só criar uma lógica bem simples.
Pessoal, consegui. Portanto estou postando o codigo como contribuição para quem um dia precisar e ter a mesma dificuldade.
public static void main(String[] args) throws ParseException {
String sdateInicio = "10/01/2010";
String sdateFim = "02/03/2011";
SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
Date dateInicial = f.parse(sdateInicio);
Date dateFinal = f.parse(sdateFim);
int months = monthsBetweenDates(dateInicial,dateFinal);
System.out.println(months);
for (int i = 0; i < months; i++) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateInicial);
calendar.add(Calendar.MONTH, i);
if (i != 0) {
calendar.set(Calendar.DAY_OF_MONTH, 1);
}
Date dataInicialPeriodo = calendar.getTime();
if (i != months -1) {
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
}else{
Calendar x = Calendar.getInstance();
x.setTime(dateFinal);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
calendar.set(Calendar.DAY_OF_MONTH, x.get(Calendar.DAY_OF_MONTH));
}
Date dataFinalPeriodo = calendar.getTime();
System.out.println("Data Inicial " + f.format(dataInicialPeriodo) + " - Data Final " + f.format(dataFinalPeriodo));
}
}
public static int monthsBetweenDates(Date startDate, Date endDate){
Calendar start = Calendar.getInstance();
start.setTime(startDate);
Calendar end = Calendar.getInstance();
end.setTime(endDate);
int monthsBetween = 0;
int dateDiff = end.get(Calendar.DAY_OF_MONTH)-start.get(Calendar.DAY_OF_MONTH);
if(dateDiff<0) {
int borrrow = end.getActualMaximum(Calendar.DAY_OF_MONTH);
dateDiff = (end.get(Calendar.DAY_OF_MONTH)+borrrow)-start.get(Calendar.DAY_OF_MONTH);
monthsBetween--;
if(dateDiff>0) {
monthsBetween++;
}
}
else {
monthsBetween++;
}
monthsBetween += end.get(Calendar.MONTH)-start.get(Calendar.MONTH);
monthsBetween += (end.get(Calendar.YEAR)-start.get(Calendar.YEAR))*12;
return monthsBetween;
}
}