tl; dr
LocalDate.parse(
"2/18/2013" ,
DateTimeFormatter.ofPattern ("M/d/uuuu")
).plusYears(1)
dettagli
Il accepted Answer è corretto, ma obsoleto come di Java 8.
java.time
Il java.time framework integrato in Java 8 e versioni successive soppianta le classi fastidiosi vecchi java.util.Date/.Calendar. Le nuove classi sono ispirate al successo del framework Joda-Time, inteso come suo successore, simile nel concetto ma ri-architettato. Definito da JSR 310. Esteso dal progetto ThreeTen-Extra. Vedi lo Tutorial.
LocalDate
Queste nuove classi includono LocalDate
, per rappresentare un valore di data-only senza tempo del giorno, né il fuso orario.
Per prima cosa dobbiamo analizzare l'input di stringa. Lo java.time formatter utilizza codici di pattern simili alle vecchie classi, ma non esattamente uguali. Quindi assicurati di leggere attentamente il nuovo documento.
imbottito Zero
notate che il vostro stringa di input manca zero cifre per alcuni valori. Ciò significa che è necessario utilizzare codici di pattern singoli, M
e d
anziché MM
e dd
. I codici doppi significano che il padding zero deve essere sempre incluso per valori a una cifra diversa, 02
anziché 2
.
String input = "2/18/2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu");
LocalDate localDate = LocalDate.parse (input , formatter);
Aggiungi un anno. Il framework java.time si prende cura dell'anno bisestile.
LocalDate yearLater = localDate.plusYears (1);
Discarica per consolle.
System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater);
localDate: 2013/02/18 e yearLater: 2014-02-18
fonte
2015-11-28 02:53:10
Che dire di ... 29/02/2016? Che anno c'è? – Makoto
possibile duplicato di [Aggiungi calendario anno a Java non funziona] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –