我有java.util.Date
类型的日期
我想减去三个月。
没有在API中找到很多乐趣。
这是普通的JDK版本,它需要Calendar
类作为帮助:
Date referenceDate = new Date();
Calendar c = Calendar.getInstance();
c.setTime(referenceDate);
c.add(Calendar.MONTH, -3);
return c.getTime();
但你应该认真考虑使用Joda library,因为Date
和Calendar
类的各种缺点。使用Joda,您可以执行以下操作:
new DateTime().minusMonths(3).toDate();
或者,如果要从给定日期而不是当前日期中减去:
new DateTime(referenceDate).minusMonths(3).toDate();
Java 8更新:使用Java 8,您还可以使用新的JSR 310 API(受Joda启发):
LocalDateTime.from(referenceDate.toInstant()).minusMonths(3);
使用Java 8你可以这样做,
Date d = Date.from(LocalDate.now().minusMonths(3).atStartOfDay(ZoneId.systemDefault()).toInstant());
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());
为了计算时间,你可以使用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());
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);
使用setTime
方法设置日期。
我总是推荐Joda这种东西。它具有更好的API,并且不会遇到标准Java日期/时间所具有的线程问题(例如SimpleDateFormat
的问题,或者一般的可变性)。
EG
DateTime result = dt.minusMonths(3);
Date类本身是不够的(+:你必须在这里使用Calendar类
沿着这些方向的东西
GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);
附:上面的代码段未经测试可编译。
public static Date getDateMonthsAgo(int numOfMonthsAgo)
{
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, -1 * numOfMonthsAgo);
return c.getTime();
}
将返回过去X个月的日期。类似地,这是一个返回过去X天的函数。
public static Date getDateDaysAgo(int numOfDaysAgo)
{
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.DAY_OF_YEAR, -1 * numOfDaysAgo);
return c.getTime();
}
你想今天 - 3个月格式化为dd MMMM yyyy
SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, -3);
Date d = c.getTime();
String res = format.format(d);
System.out.println(res);
所以这段代码可以完成这项工作;)
使用java.sql.Date(java.util.Date的子类)和JDK的8 LocalDate帮助你可以在一行中完成;)
Date date = java.sql.Date.valueOf(LocalDate.now().minus(3, ChronoUnit.MONTHS));
你可以使用Apache Commons Lang3 DateUtils addMonths函数。
static Date addMonths(Date date, int amount)
在返回新对象的日期添加若干个月。原始日期不变。要添加的金额可能是负数,所以你可以回3个月。
您可以使用
Date d1 = new Date()
d1.setMonth(d1.month-3)
希望这可以帮助