如何从当前日期减少一个月并使用java存储在日期变量中?

kar*_*thi 48 java datetime date java-time

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

 java.util.Date da = new Date();
 da.add(Calendar.MONTH, -1); //error
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*øld 90

使用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date result = cal.getTime();
Run Code Online (Sandbox Code Playgroud)


DVa*_*rga 13

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

如果要Date返回对象:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant());
Run Code Online (Sandbox Code Playgroud)

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

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1);
Run Code Online (Sandbox Code Playgroud)

  • 我建议更改此答案以显示特定时区,例如 `ZoneId.of( "Pacific/Auckland" )` 而不是 `ZoneOffset.UTC`。如果有人真的想要 UTC,那么使用“OffsetDateTime”比“ZonedDateTime”更合适。 (2认同)

Jig*_*shi 8

Calendar calNow = Calendar.getInstance()

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

// fetching updated time
Date dateBeforeAMonth = calNow.getTime();
Run Code Online (Sandbox Code Playgroud)


Ahi*_*iel 5

您可以使用 Calendar

    java.util.Date da = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(da);
    cal.add(Calendar.MONTH, -1);
    da = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

  • (我假设使用`setTime`是为了演示目的,因为`Calendar.getInstance`将返回一个设置为当前日期/时间的`Calendar` ...你也可能想放入`da = cal.getTime() `这样你最终会得到一个'Date`值...) (2认同)

Fre*_*zaq 5

使用JodaTime:

Date date = new DateTime().minusMonths(1).toDate();
Run Code Online (Sandbox Code Playgroud)

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

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


Gre*_*cer 5

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

import java.time.LocalDate;

LocalDate mydate = LocalDate.now(); // Or whatever you want
mydate = mydate.minusMonths(1);
Run Code Online (Sandbox Code Playgroud)

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

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

mydate.plusMonths(1);
mydate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).getDayOfMonth();
mydate.with(TemporalAdjusters.lastDayOfMonth());
Run Code Online (Sandbox Code Playgroud)

  • 非常好的答案,谢谢。不需要其他许多答案中包含的复杂性。 (2认同)