2013-02-18 109 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