如何从Java中的Date对象中减去X天?

时间:2012-08-09 11:57:32

标签: java date datetime calendar java.util.date

我想做类似的事情:

Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"

怎么做?

11 个答案:

答案 0 :(得分:226)

Java 8及更高版本

使用Java 8的日期时间API更改时,请使用LocalDate

LocalDate date = LocalDate.now().minusDays(300);

Java 7及更早版本

使用Calendaradd()方法

Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();

答案 1 :(得分:30)

@JigarJoshi它是一个很好的答案,当然还有@Tim建议使用。joda-time

我只想添加更多从java.util.Date中减去天数的可能性。

Apache的公

一种可能性是使用apache-commons-lang。您可以使用DateUtils执行此操作,如下所示:

Date dateBefore30Days = DateUtils.addDays(new Date(),-30);

当然添加commons-lang依赖关系只做日期减去它可能不是一个好选项,但是如果你已经使用commons-lang它是一个不错的选择。 addYearsaddMonthsaddWeeks等方法也很方便,请查看api here

Java 8

另一种可能性是使用LocalDate方法从 Java 8 中利用新的minusDays(long days)

LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);

答案 2 :(得分:28)

我真的建议您使用此处的DateTime库:https://www.joda.org/joda-time/

这是我为几乎每个构建的Java项目添加的第一个依赖项之一。

如果您有一些遗留代码需要日期或日历,您可以将其从DateTimes转换回来。

所以减去300天会很简单:

Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();

答案 3 :(得分:12)

Java 8 Time API:

Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);

答案 4 :(得分:10)

使用Java 8,它现在非常简单:

 LocalDate date = LocalDate.now().minusDays(300);

可以找到新api的精彩指南here

答案 5 :(得分:7)

正如您所见HERE,您可以进行大量操作。这是一个展示你可以做什么的例子!

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
*/

答案 6 :(得分:1)

我创建了一个使任务更容易的功能。

  • 在dateString之后的7天内:dateCalculate(dateString,"yyyy-MM-dd",7);

  • 最多7天到达日期: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());
}

答案 7 :(得分:1)

在 Java 8 中你可以这样做:

Instant inst = Instant.parse("2018-12-30T19:34:50.63Z"); 

// subtract 10 Days to Instant 
Instant value = inst.minus(Period.ofDays(10)); 
// print result 
System.out.println("Instant after subtracting Days: " + value); 

答案 8 :(得分:0)

您可以使用SimpleDateFormat

轻松地使用日历减去
 public static String subtractDate(String time,int subtractDay) throws ParseException {


        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
        cal.setTime(sdf.parse(time));
        cal.add(Calendar.DATE,-subtractDay);
        String wantedDate = sdf.format(cal.getTime());

        Log.d("tag",wantedDate);
        return wantedDate;

    }

答案 9 :(得分:0)

您也许还可以使用Duration类。例如

Date currentDate = new Date();
Date oneDayFromCurrentDate = new Date(currentDate.getTime() - Duration.ofDays(1).toMillis());

答案 10 :(得分:-4)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>