2013-02-18 41 views
24

Tôi đã thiết lập mọi thứ để lưu trữ ngày hiện tại thành một biến trong Java. Những gì tôi đang cố gắng tìm ra là làm thế nào để lưu trữ một ngày 1 năm sau ngày hiện tại.lưu trữ ngày và ngày hiện tại 1 năm kể từ hiện tại trong java

import java.util.Date; 
import java.text.SimpleDateFormat; 
import java.text.DateFormat; 
import java.util.Scanner; 
import java.util.Calendar; 

Dưới đây là những gì tôi có cho ngày hiện tại:

DateFormat newDate = new SimpleDateFormat("MM/dd/yyyy"); 
Date date = new Date(); 
startDate = newDate.format(date); 

Vì vậy, nếu nó là hiện nay ví dụ nó sẽ lưu trữ 2013/02/18. Tôi đang cố gắng lưu trữ ngày 2/18/2014. Tôi sẽ đi đâu để tới đó?

+0

Còn về ... 2/29/2016? Một năm sau đó là gì? – Makoto

+1

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) –

Trả lời

68

Nếu bạn không muốn kéo thư viện bên ngoài, chỉ cần sử dụng calendar.add(Calendar.YEAR, 1)

Calendar cal = Calendar.getInstance(); 
Date today = cal.getTime(); 
cal.add(Calendar.YEAR, 1); // to get previous year add -1 
Date nextYear = cal.getTime(); 

Lưu ý, nếu ngày là 29/Feb/2012 và bạn thêm 1 năm, bạn sẽ nhận được 28/Feb/2013

+1

cảm ơn @iTech đã hoạt động tốt đẹp – bardockyo

+1

cảm ơn làm việc tốt của mình –

5

Sử dụng Calendar#add(int field, int amount) method.You nên sử dụng API lịch để điều chỉnh hoạt động ngày và giờ.

Calendar today = Calendar.getInstance(); 
Calendar nextYearToday = today; 
nextYearToday.add(Calendar.YEAR, 1); 
-2

Ở Android đơn giản hơn bao giờ:

oneYearAfterDate = new Date(date.getTime() + DateUtils.YEAR_IN_MILLIS)

3

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ẻ, Md thay vì MMdd. 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

+0

Cảm ơn. Ví dụ tốt về câu trả lời muộn mà vẫn có thể thêm giá trị to lớn. – HopeKing

0
Calendar cal = Calendar.getInstance(); 
     Date today = cal.getTime(); 
     cal.add(Calendar.YEAR, 1); // to get previous year add 1 
     cal.add(Calendar.DAY_OF_MONTH, -1); // to get previous day add -1 
     Date expiryDate = cal.getTime(); 


     System.out.println("today is --> "+today); 
     System.out.println("expiryDate is --> "+expiryDate); 

Output hôm nay là -> Fri 01 tháng 12 10:10:52 GMT + 05: 30 2017

hết hạnNgày là -> Thứ Sáu ngày 30 tháng 11 10:10:52 GMT + 05: 30 2018

ngày hôm nay là -> Fri 01 tháng 12 10:10:52 GMT + 05: 30 2017

expiryDate là -> Fri Jul 30 10:10:52 GMT + 05: 30 2018

enter image description here

+0

FYI, các lớp 'Date' và' Lịch 'phiền toái hiện đã được thừa kế, và nên tránh. Chúng được thay thế bởi các lớp java.time được xây dựng trong Java 8 và Java 9. Đối với Java 6 và Java 7, hãy xem dự án * ThreeTen-Backport *. –

+0

Vui lòng giúp cách kiểm tra ngày hết hạn trong java 9. –

+0

Xem [Câu trả lời của tôi] (https://stackoverflow.com/a/33967171/642706) cho mã java.time. –

Các vấn đề liên quan