java.util.Date - 从日期删除三个月?

AJM*_*AJM 40 java

我有一个类型的日期 java.util.Date

我想减去三个月.

没有在API中找到很多乐趣.

Dan*_*ski 82

这是普通的JDK版本,需要将Calendar类作为帮助者:

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(referenceDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();
Run Code Online (Sandbox Code Playgroud)

但是你应该认真考虑使用Joda库,因为它DateCalendar类的各种缺点.使用Joda,您可以执行以下操作:

new DateTime().minusMonths(3).toDate();
Run Code Online (Sandbox Code Playgroud)

或者,如果要从给定日期而不是当前日期中减去:

new DateTime(referenceDate).minusMonths(3).toDate();
Run Code Online (Sandbox Code Playgroud)

Java 8更新:使用Java 8,您还可以使用新的JSR 310 API(受Joda启发):

LocalDateTime.from(referenceDate.toInstant()).minusMonths(3);
Run Code Online (Sandbox Code Playgroud)


fir*_*umb 14

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);
Run Code Online (Sandbox Code Playgroud)

使用setTime方法设置日期.

  • "使用setTime方法设置日期" - 在那个简单的句子中是java.util.Date所有错误的总和:-) (2认同)
  • java.util.Date是java的标准.你是对的.它的表现并不好.但我坚持认为我的回答是AJM问题的解决方案之一 (2认同)

Geo*_*lou 7

使用Java 8你可以这样做,

Date d = Date.from(LocalDate.now().minusMonths(3).atStartOfDay(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)

该类LocalDate有很多方法可以帮助您轻松计算上述日期,

// Add 2 months
Date d = Date.from(LocalDate.now().plusMonths(2).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Add 5 days
Date d = Date.from(LocalDate.now().plusDays(5).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Minus 1 day and 1 year
Date d = Date.from(LocalDate.now().minusYears(1).minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)

为了计算时间,您可以使用该类LocalDateTime

// Minus 1 year, minus 1 days, plus 1 hour
Date d = Date.from(LocalDateTime.now().minusYears(1).minusDays(1).plusHours(1).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)