tl; dr
LocalDate.parse(
"2/18/2013" ,
DateTimeFormatter.ofPattern ("M/d/uuuu")
).plusYears(1)
Chi tiết
Các accepted Answer là đúng, nhưng lỗi thời như Java 8.
java.time
Khuôn khổ java.time được tích hợp vào Java 8 và sau này thay thế lớp java.util.Date/.Calendar cũ phiền hà. Các lớp học mới được lấy cảm hứng từ khung công tác rất thành công Joda-Time, được dự định là người kế thừa của nó, tương tự về khái niệm nhưng lại được kiến trúc lại. Được xác định bởi JSR 310. Được mở rộng bởi dự án ThreeTen-Extra. Xem Tutorial.
LocalDate
Những lớp học mới bao gồm LocalDate
, để đại diện cho một giá trị ngày tháng chỉ không có thời gian-of-ngày cũng không múi giờ.
Trước tiên, chúng tôi phải phân tích cú pháp đầu vào Chuỗi. java.time formatter sử dụng các mã mẫu giống với các lớp cũ, nhưng không giống hệt nhau. Vì vậy, hãy chắc chắn đọc tài liệu mới một cách cẩn thận.
Đệm số không
Lưu ý rằng đầu vào của bạn Chuỗi thiếu số 0 đứng đầu cho một số giá trị. Điều đó có nghĩa là bạn nên sử dụng các mã mẫu đơn lẻ, M
và d
thay vì MM
và dd
. Mã đôi có nghĩa là bạn mong đợi đệm không phải lúc nào cũng được bao gồm cho các giá trị chữ số khác, 02
thay vì 2
.
String input = "2/18/2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu");
LocalDate localDate = LocalDate.parse (input , formatter);
Thêm một năm. Khung công tác java.time sẽ xử lý năm nhuận.
LocalDate yearLater = localDate.plusYears (1);
Dump to console.
System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater);
LOCALDATE: 2013/02/18 và yearLater: 2014-02-18
Nguồn
2015-11-28 02:53:10
Còn về ... 2/29/2016? Một năm sau đó là gì? – Makoto
bản sao có thể có của [Thêm năm vào Lịch Java không hoạt động] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –