O problema é que você pega o dia do mês corrente no seu método getLastDayOfMonth(Calendar calendar), então ele retorna um integer 31, tenta pegar a data “31/02/2012”, o sistema retorna 02/03, por isso que fica estranho, se ao invés de retornar o dia do mês vc colocar outro valor, por exemplo 01, tua função vai retornar certo o dia 01 de fevereiro.
carlosmoreira
veja, acho que sei o seu problema,
esse:
int lastDay = getLastDayOfMonth(calendar);
fazendo isso
Calendar calendar = Calendar.getInstance();
vc pega a data 01/01/1900 00:00
dai vc faz isso
int lastDay = getLastDayOfMonth(calendar);
vc está recebendo sempre o último dia de janeiro.
vc precisa setar o ano e o mês antes de getLastDayOfMonth(calendar);
O teu problema continua, mas estavas a executar no dia 31 e ele aparecia. Hoje como já é dia 1 já não o vês, só vais voltar a ter o mesmo problema no dia 29 ou 30 (para Fevereiro ) e no dia 31 (para os restantes).
O Calendar.getInstance() devolve a data actual. Portanto ontem devolvia 31/07/2013
Ao fazeres o set de MONTH para Fevereiro, vai dar 31 de Fevereiro, o que não existe e transformar em 2 de Março e já estás no mês errado. Antes de fazeres o set do MONTH, tens de fazer o set de DAY_OF_MONTH para 1 para garantires que não tens estes problemas.
carlosmoreira
É verdade pmlm.
confundi com getTimeInMillis() que retorna os milisegundos desde 1900… =]
carolino
Poxa pmlm não tinha percebido esse detalhe de setar o dia antes do mês para quando é o valor 30 31