我的日期类型为java.util.Date
我想从中减去三个月。
在API中没有找到很多乐趣。
答案 0 :(得分:79)
这是普通的 JDK 版本,它需要Calendar
类作为帮助者:
Date referenceDate = new Date();
Calendar c = Calendar.getInstance();
c.setTime(referenceDate);
c.add(Calendar.MONTH, -3);
return c.getTime();
但是,由于Date
和Calendar
类的各种缺点,您应该认真考虑使用Joda library。使用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);
答案 1 :(得分:14)
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);
使用setTime
方法设置日期。
答案 2 :(得分:4)
我总是推荐Joda这类东西。它具有更好的API,并且不会遇到标准Java日期/时间所具有的线程问题(例如SimpleDateFormat
的问题,或者一般的可变性)。
e.g。
DateTime result = dt.minusMonths(3);
答案 3 :(得分:2)
Date类本身是不够的(+: 你必须在这里使用Calendar课程
沿着这些方向的东西
GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);
P.S。上面的代码段未经测试可编译。
答案 4 :(得分:1)
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();
}
答案 5 :(得分:1)
你想今天 - 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);
所以这段代码可以完成这项工作;)
答案 6 :(得分:1)
使用java.sql.Date(java.util.Date的子类)和JDK的8 LocalDate帮助你可以在一行中完成;)
let inputsContainerView: UIView = { () -> UIView in
let view = UIView()
view.backgroundColor = UIColor.whiteColor()
view.translatesAutoresizingMaskIntoConstraints = false
view.layer.cornerRadius = 5
view.layer.masksToBounds = true
return view
}()
答案 7 :(得分:0)
您可以使用Apache Commons Lang3 DateUtils addMonths功能。
static Date addMonths(Date date, int amount)
在返回新对象的日期中添加若干个月。原始日期不变。 要添加的金额可能为负数,因此您可以回溯3个月。
答案 8 :(得分:0)
您可以使用
Date d1 = new Date()
d1.setMonth(d1.month-3)
希望这有帮助
答案 9 :(得分:0)
使用 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());
答案 10 :(得分:0)
String startDate =“ 15/10/1987”;
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(startDate);
String formattedDate = new SimpleDateFormat("yyyy-MM-dd").format(date);
LocalDate today = LocalDate.parse(formattedDate);
String endDate=today.minusMonths(3).toString();