64

如何从当前日期减少一个月并希望java.util.Date使用此代码在变量 im 中疼痛,但它在第 2 行显示错误

 java.util.Date da = new Date();
 da.add(Calendar.MONTH, -1); //error

如何将此日期存储在java.util.Date变量中?

4

8 回答 8

106

使用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date result = cal.getTime();
于 2013-05-06T06:10:36.557 回答
21

从 Java 8 开始,建议的方法是使用Date-Time API而不是Calendar.

如果要Date返回对象:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant());

如果您不需要确切的Date对象,则可以直接使用包提供的类,甚至可以获取其他时区的日期:

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1);
于 2016-09-16T11:28:56.510 回答
9
Calendar calNow = Calendar.getInstance()

// adding -1 month
calNow.add(Calendar.MONTH, -1);

// fetching updated time
Date dateBeforeAMonth = calNow.getTime();
于 2013-05-06T06:10:25.763 回答
7

您可以使用Calendar

    java.util.Date da = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(da);
    cal.add(Calendar.MONTH, -1);
    da = cal.getTime();
于 2013-05-06T06:12:37.000 回答
6

在 Java8 和 Java9 中使用新的 java.time 包

import java.time.LocalDate;

LocalDate mydate = LocalDate.now(); // Or whatever you want
mydate = mydate.minusMonths(1);

使用此方法的优点是您可以避免所有关于不同月份长度的问题,并且在调整日期和范围方面具有更大的灵活性。本地部分也是时区智能,因此很容易在它们之间进行转换。

顺便说一句,使用 java.time 您还可以获得星期几、一个月中的某一天、直到最后一个月的所有日子、直到一周中的某一天的所有日子等。

mydate.plusMonths(1);
mydate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).getDayOfMonth();
mydate.with(TemporalAdjusters.lastDayOfMonth());
于 2018-05-14T22:15:23.103 回答
5

使用乔达时间

Date date = new DateTime().minusMonths(1).toDate();

JodaTime 为日期操作提供了方便的 API。

请注意,类似的 Date API 将在 JDK8 中与 JSR310 一起引入

于 2013-05-06T09:52:39.713 回答
0

减少 1 个月的 JDF

Date dateTo = new SimpleDateFormat("yyyy/MM/dd").parse(jdfMeTo.getJulianDate());
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateTo);
        cal.add(Calendar.MONTH, -1);
        Date dateOf = cal.getTime();
        Log.i("dateOf", dateOf.getTime() + "");
        jdfMeOf.setJulianDate(cal.get(Calendar.DAY_OF_YEAR), cal.get(Calendar.DAY_OF_MONTH), 
        cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
于 2020-01-11T13:52:20.613 回答
0

您还可以使用来自 apache common的DateUtils 。该库还支持添加小时、分钟等。

Date date = DateUtils.addMonths(new Date(), -1)
于 2022-02-21T20:06:26.887 回答