Try the following:
EDITED
As reported in the commentary, there is a need to decrease 1 in the month to set a Date (String
) in a Calendar
.
Example:
final String[] valI = inicio.split("/");
cINI.set(Calendar.DAY_OF_MONTH, Integer.valueOf(valI[0])-1);
Thinking about this and in order to simplify the code a little, follow the modified method:
public static List<String> diferencaDeDatas(String inicio, String fim) throws ParseException{
// Tranforma Date em String e vice-versa
final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar c = Calendar.getInstance();
// Clonamos os Calendar para não ter a mesma referencia
Calendar cINI = (Calendar) c.clone();
Calendar cFIM = (Calendar) c.clone();
//Transformamos a STring em java.util.Date
Date dtIni = sdf.parse(inicio);
Date dtFim = sdf.parse(fim);
// Setamos dos java.util.Date nos Calendar's
cINI.setTimeInMillis(dtIni.getTime());
cFIM.setTimeInMillis(dtFim.getTime());
// Se a data final for menor que a maior ou igual retorna uma lista vazia...
if(cFIM.getTimeInMillis() <= cINI.getTimeInMillis()){
return new ArrayList<>(0);
}
// Lista que vamos retonar com o valores
List<String> itens = new ArrayList<>(0);
// adicionamos +1 dia, pois não iremos contar o dia inicial
cINI.set(Calendar.DAY_OF_MONTH, cINI.get(Calendar.DAY_OF_MONTH)+1);
// vamos realizar a acão enquanto a data inicial for menor q a final
while(cINI.getTimeInMillis() < cFIM.getTimeInMillis()){
// adicionamos na lista...
itens.add(sdf.format(cINI.getTime()));
// adicionamos +1 dia....
cINI.set(Calendar.DAY_OF_MONTH, cINI.get(Calendar.DAY_OF_MONTH)+1);
}
return itens;
}
Return randomly or always will be with this difference from the example?
– user28595
These dates are in literal value? String even???
– Thiago Luiz Domacoski
And if the entry is 20/02/2016 and 25/02/2016 ?
– Pablo Almeida
The dates can be in any value at the end can convert to what I will use, in the case being String, the return value would be in ascending order of the dates. In the case cited by Pablo he would return: 21/02/2016, 22/02/2016, 23/02/2016 and 24/02/2016. The return may also include the dates passed in the case then would be: 20/02/2016, 21/02/2016, 22/02/2016, 23/02/2016, 24/02/2016 and 25/02/2016.
– Fernando Ferreira