
Originariamente inviata da
valia
ok, anche se fosse così non si spiega perché coi mesi di 31 giorni andando indietro di un giorno non ne portino 2 di differenza (che poi è il reale problema).
mi spiego.
1 gennaio 2014 1 febbraio 2014 mi conti un mese (ok).
31 dicembre 2013 1 febbraio 2014 mi conti un mese e 1 giorno (ok)
maaaa se prendi il mese di 30, ne metti 2.
In ogni caso, un bacarazzo da qualche parte è seminato
edit:
partiamo dal 30 novembre e aggiungo 2 mesi, siamo al 30 di gennaio, 31 gennaio 1 giorno e 1 febbraio non incluso, quindi 2 mesi e 1 giorno, non mi torna sempre il secondo giorno
Il problema è che si sta ragionando a periodi e non a giorni: fai questa prova:
codice:
LocalDate gennaio = LocalDate.of(2014, 1, 31);
LocalDate marzo = LocalDate.of(2014, 3, 31);
// Aggiungo un mese ad entrambe le date
LocalDate d1 = gennaio.plus(1, ChronoUnit.valueOf("MONTHS"));
LocalDate d2 = marzo.plus(1, ChronoUnit.valueOf("MONTHS"));
System.out.format("%s + 1 MESE -> %s%n", gennaio, d1);
System.out.format("%s + 1 MESE -> %s%n", marzo, d2);
Ecco il risultato (come atteso):
codice:
2014-01-31 + 1 MESE -> 2014-02-28
2014-03-31 + 1 MESE -> 2014-04-30
Il risultato è corretto, ma nel primo caso ha aggiunto 28 giorni (è andato dalla fine del mese di gennaio alla fine del mese di febbraio), nel secondo ne ha aggiunti 30 (è andato dalla fine di marzo alla fine di aprile... eppure l'operazione è la stessa: ho aggiunto 1 mese = sto ragionando a mesi (periodi) non a giorni. I mesi hanno peso (in giorni) diverso a seconda del periodo.
Di conseguenza: dal 01/05/2014 al 01/02/2015 ci sono 9 mesi esatti (dal primo giorno di un mese al primo giorno di un altro mese), mentre dal 30/04/2014 al 01/02/2015 ci sono 9 mesi e 2 giorni... perchè aggiungendo 9 mesi cado al 30 gennaio 2015 (per l'annosa questione che aggiungendo 1 mese alla fine di un mese di 30 giorni cado al 30 del mese dopo e non al 31) e mi rimangono altri 2 giorni per arrivare al 1 febbraio.
Ciao.