tl; dr
LocalDate.parse(
"2/18/2013" ,
DateTimeFormatter.ofPattern ("M/d/uuuu")
).plusYears(1)
Szczegóły
accepted Answer jest poprawna, ale przestarzały jak Java 8.
java.time
java.time ramy wbudowany w Java 8 i później wypiera kłopotliwe starych klas java.util.Date/.Calendar. Nowe klasy zostały zainspirowane bardzo popularnym frameworkem Joda-Time, który ma być jego następcą, podobnym do koncepcji, ale zmienionym na nowo. Zdefiniowany przez JSR 310. Rozszerzony o projekt ThreeTen-Extra. Zobacz Tutorial.
LocalDate
Te nowe zajęcia obejmują LocalDate
, do reprezentowania wartości daty tylko z no time-of-day ani strefy czasowej.
Najpierw musimy przeanalizować wejście String. java.time formatter używa kodów wzorcowych podobnych do starych klas, ale nie identycznych. Dlatego koniecznie przeczytaj uważnie nowego doktora.
usztywniany Zero
zauważyć, że ciąg wejściowy brakuje zera cyfrę dla niektórych wartości. Oznacza to, że powinieneś używać kodów pojedynczych, M
i d
zamiast MM
i dd
. Podwójne kody oznaczają, że zawsze należy uwzględnić dopełnienie zerowe, aby uzyskać jednocyfrowe wartości, tj. 02
zamiast 2
.
String input = "2/18/2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu");
LocalDate localDate = LocalDate.parse (input , formatter);
Dodaj rok. Framework java.time zajmuje się rokiem przestępnym.
LocalDate yearLater = localDate.plusYears (1);
Zrzut na konsolę.
System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater);
LOCALDATE: 18.02.2013 i yearLater: 2014-02-18
Co z ... 2/29/2016? Co to jest za rok? – Makoto
możliwe duplikat [Dodaj roku do kalendarza Java nie działa] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –