如何从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()));