如何从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" 怎么做?
 使用Calendar的add()方法 
 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 。 你可以使用DateUtils来DateUtils ,如下所示: 
 Date dateBefore30Days = DateUtils.addDays(new Date(),-30); 
 当然,添加commons-lang依赖性来做只有date减去它可能不是一个好的select,但是如果你已经使用commons-lang这是一个不错的select。 还有方便的方法来addYears , addMonths , addWeeks等,看看这里的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()));