Fala ae galera
Estou trabalhando em um sistema e ele trabalha com o formato yyyyMM (ex: 201006)
Preciso fazer um método que me dê a diferença de meses entre dois períodos, por exemplo 201008 e 201006
como posso fazer para calcular essa diferença? tentei ver exemplos do uso do calendar e me deixou mais confuso.
obrigado
Amigo
Pode dar o substring pegando as duas posições de cada uma das datas e fazer uma subtração. Atenção coloca isso dentro de um try catch para pode lançar uma exception caso tenha algum problema.
e ai man…segue
import java.util.Calendar;
class DateTeste {
public static void main(String[] args) {
final Calendar jan2010 = Calendar.getInstance();
jan2010.set(Calendar.MONTH, 0);
final Calendar set2010 = Calendar.getInstance();
set2010.set(Calendar.MONTH, 8);
System.out.println(DateTeste.montsDifference(jan2010.getTime(), set2010.getTime())); // 8
System.out.println(DateTeste.montsDifference(set2010.getTime(), jan2010.getTime())); // 0
System.out.println(DateTeste.montsDifference(jan2010.getTime(), jan2010.getTime())); // 0
final Calendar fev2010 = Calendar.getInstance();
fev2010.set(Calendar.MONTH, 1);
System.out.println(DateTeste.montsDifference(jan2010.getTime(), fev2010.getTime())); // 1
final Calendar jan2009 = Calendar.getInstance();
jan2009.set(Calendar.YEAR, 2009)
jan2009.set(Calendar.MONTH, 0);
final Calendar dez2010 = Calendar.getInstance();
dez2010.set(Calendar.MONTH, 11);
System.out.println(DateTeste.montsDifference(jan2009.getTime(), dez2010.getTime())); // 23
}
public static Integer montsDifference(final Date paramDateStart, final Date paramDateEnd) {
if (null == paramDateStart || null == paramDateEnd) {
return null;
}
// iremos usar o comparator
// menor -1, igual o, maior 1
// por isso setamos por igual Dia, Hora, Minuto, Segundos, Milisegundos
// obs: joguei a hora para 2 para evitar problema com horário de verão
final Calendar dateStart = Calendar.getInstance();
dateStart.setTime(paramDateStart);
dateStart.set(Calendar.DAY_OF_MONTH, 1);
dateStart.set(Calendar.HOUR, 2);
dateStart.set(Calendar.MINUTE, 0);
dateStart.set(Calendar.SECOND, 0);
dateStart.set(Calendar.MILLISECOND, 0);
final Calendar dateEnd = Calendar.getInstance();
dateEnd.setTime(paramDateEnd);
dateEnd.set(Calendar.DAY_OF_MONTH, 1);
dateEnd.set(Calendar.HOUR, 2);
dateEnd.set(Calendar.MINUTE, 0);
dateEnd.set(Calendar.SECOND, 0);
dateEnd.set(Calendar.MILLISECOND, 0);
final Integer ret = 0;
// enquanto a dateStart for menor que dateEnd
// adicionamos 1 mês e incrementamos o valor de 'ret'
while(dateStart.compareTo(dateEnd) < 0) {
dateStart.add(Calendar.MONTH, 1);
ret++;
}
return ret;
}
}
espero ter ajudado