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

时间:2009-08-21 10:23:11

标签: java

我的日期类型为java.util.Date

我想从中减去三个月。

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

11 个答案:

答案 0 :(得分:79)

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

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(referenceDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();

但是,由于DateCalendar类的各种缺点,您应该认真考虑使用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();