如何从Java中的Date对象中减去X日?

我想做一些事情:

Date date=new Date(); //current date date=date-300;//substact 300 days from current date and I want to use this "date" 

怎么做?

使用Calendaradd()方法

 Calendar cal = Calendar.getInstance(); cal.setTime(dateInstance); cal.add(Calendar.DATE, -30); Date dateBefore30Days = cal.getTime(); 

我真的build议你使用这里find的DateTime库: http : //joda-time.sourceforge.net/

这是我添加到几乎每个构build的Java项目中的第一个依赖关系之一。

如果您有一些遗留代码需要date或日历,则可以将其从date时间转换回来。

所以减去300天将是如此简单:

 Date date = new Date(); // Or where ever you get it from Date daysAgo = new DateTime(date).minusDays(300).toDate(); 

@JigarJoshi这是很好的答案,当然也@Tim推荐使用。 乔达时间 。

我只想添加更多的可能性来从java.util.Date减去天数。

Apache的公地

一种可能是使用apache-commons-lang 。 你可以使用DateUtilsDateUtils ,如下所示:

 Date dateBefore30Days = DateUtils.addDays(new Date(),-30); 

当然,添加commons-lang依赖性来做只有date减去它可能不是一个好的select,但是如果你已经使用commons-lang这是一个不错的select。 还有方便的方法来addYearsaddMonthsaddWeeks等,看看这里的api 。

Java 8

另一种可能性是利用来自Java 8的新的LocalDate ,使用minusDays(long days)方法:

 LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30); 

对于Java 8,现在非常简单:

  LocalDate date = LocalDate.now().minusDays(300); 

在这里可以find一个很好的指导新的API。

Java 8时间API:

 Instant now = Instant.now(); //current date Instant before = now.minus(Duration.ofDays(300)); Date dateBefore = Date.from(before); 

正如你可以看到这里有很多你可以做的操纵。 这里有一个例子,显示你可以做什么!

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); //Add one day to current date. cal.add(Calendar.DATE, 1); System.out.println(dateFormat.format(cal.getTime())); //Substract one day to current date. cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); System.out.println(dateFormat.format(cal.getTime())); /* Can be Calendar.DATE or * Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND */ 

我创build了一个function,使任务更容易。

  • dateString: dateCalculate(dateString,"yyyy-MM-dd",7);后7天

  • 得到7天upto dateString: dateCalculate(dateString,"yyyy-MM-dd",-7);


 public static String dateCalculate(String dateString, String dateFormat, int days) { Calendar cal = Calendar.getInstance(); SimpleDateFormat s = new SimpleDateFormat(dateFormat); try { cal.setTime(s.parse(dateString)); } catch (ParseException e) { e.printStackTrace(); } cal.add(Calendar.DATE, days); return s.format(cal.getTime()); } 

你可以简单地实现使用joda datetime库。

 DateTime date = new DateTime().minusDays(300); 
 c1.set(2017, 12 , 01); //Ex: 1999 jan 20 //System.out.println("Date is : " + sdf.format(c1.getTime())); c1.add(Calendar.MONTH, -2); // substract 1 month System.out.println ("Date minus 1 month : " + sdf.format(c1.getTime()));