2013-02-18 190 views
24

我已經設置好了所有東西以將當前日期存儲到Java中的變量中。我試圖弄清楚的是如何在當前日期之後存儲1年的日期。存儲當前的日期和日期從java中的當前1年

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

以下是我對當前日期:

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

所以,如果今天例如,它會保存2013年2月18日這裏面。我試圖存儲2014年2月18日的日期。我會如何去做這件事?

+0

怎麼樣... 2/29/2016?那一年是多少年?的 – Makoto 2013-02-18 23:05:26

+1

可能重複[年加入Java日曆不起作用(http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) – 2013-02-18 23:09:44

回答

68

如果你不想拖累外部庫,只是用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(); 

注意,如果日期爲29/Feb/2012,你添加1年,你會得到28/Feb/2013

+1

感謝@iTech奏效精美 – bardockyo 2013-02-18 23:21:53

+1

感謝它的工作正常 – 2016-06-15 13:39:58

-2

在Android是比以往更簡單:

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

3

TL;博士

LocalDate.parse( 
    "2/18/2013" , 
    DateTimeFormatter.ofPattern ("M/d/uuuu") 
).plusYears(1) 

詳細

accepted Answer是正確的,但過時的如Java 8中。

java.time

java.time框架構建在Java 8和更高版本取代了麻煩老java.util.Date/.Calendar類。新課程的靈感來自非常成功的Joda-Time框架,作爲其後繼者,其概念類似但重新架構。由JSR 310定義。由ThreeTen-Extra項目擴展。請參閱Tutorial

LocalDate

這些新類包括LocalDate,表示沒有時間的天,也不時區的日期,唯一的價值。

首先我們必須解析字符串輸入。 java.time formatter使用類似於舊類的模式代碼,但不完全相同。所以一定要仔細閱讀新文檔。

填充零

請注意,您的輸入字符串缺少某些值的前導零位。這意味着您應該使用單個模式代碼Md而不是MMdd。雙代碼意味着您期望填充零始終包含在其他一位數值中,而不是2,而不是02

String input = "2/18/2013"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu"); 
LocalDate localDate = LocalDate.parse (input , formatter); 

添加一個月。 java.time框架負責閏年。

LocalDate yearLater = localDate.plusYears (1); 

轉儲到控制檯。

System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater); 

LOCALDATE的:2013年2月18日和yearLater:2014年2月18日

+0

謝謝。晚回答的好例子仍然可以增加巨大的價值。 – HopeKing 2017-07-27 07:14:41

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

輸出 今天 - >週五12月1 10點10分52秒GMT + 05:30 2017

expiryDate is - > Fri Nov 30 10:10:52 GMT + 05:30 2018

今天

日期 - >週五12月1 10時10分52秒GMT + 05:30 2017年

expiryDate是 - >週五11月30日10時10分52秒GMT + 05:30 2018

enter image description here

+0

僅供參考,麻煩的Date和Calendar類現在是遺留的,應該避免。它們被構建在Java 8和Java 9中的java.time類所取代。對於Java 6和Java 7,請參閱* ThreeTen-Backport *項目。 – 2017-12-01 17:19:22

+0

請幫助如何檢查java中的失效日期9。 – 2017-12-04 09:27:38

+0

參見[我答](https://stackoverflow.com/a/33967171/642706)爲java.time代碼。 – 2017-12-04 15:45:39