Ho scritto una libreria per la data e ho bisogno di implementare l'aggiunta di una durata a una data-ora.
Se aggiungo una durata di 1 mese: P1M
al 31 marzo 2012: 2012-03-31
, lo standard definisce il risultato?
Poiché la data risultante (31 aprile) non esiste, esistono almeno due opzioni:
- Tornare all'ultimo giorno del mese risultante. Questo è l'approccio attualmente adottato dall'API ThreeTen , l'implementazione di riferimento (alfa) di JSR-310:
ZonedDateTime date = ZonedDateTime.parse("2012-03-31T00:00:00Z");
Period duration = Period.parse("P1M");
System.out.println(date.plus(duration).toString());
// 2012-04-30T00:00Z
- Trasportare il giorno in più al mese successivo. Questo è l'approccio adottato dalla classe DateTime in PHP:
$date = new DateTime('2012-03-31T00:00:00Z');
$duration = new DateInterval('P1M');
echo $date->add($duration)->format('c');
// 2012-05-01T00:00:00+00:00
Sono sorpreso che due librerie di data e ora siano contraddittorie su questo punto, quindi mi chiedo se lo standard definisce il risultato di questa operazione?