如何在Java之前找到3个月前的开始?

Tan*_*ant 0 java date

final Calendar tentativeStartDate =  Calendar.getInstance();
    tentativeStartDate.set(Calendar.MILLISECOND, 0);
    tentativeStartDate.set(Calendar.SECOND, 0);
    tentativeStartDate.set(Calendar.MINUTE, 0);
    tentativeStartDate.set(Calendar.HOUR, 0);
    tentativeStartDate.set(Calendar.DATE, 1);
    tentativeStartDate.add(Calendar.MONTH, -3);
Run Code Online (Sandbox Code Playgroud)

我想在本月之前的3个月开始.例如,如果今天是6月18日,我希望4月1日午夜0分钟/秒.[4月1日00:00:00]

但这种逻辑并没有给我正确的答案.Java中有更好/不同的方式吗?

Men*_*ena 6

使用Java 8,您可以使用流利的习惯用法,如下所示:

ZonedDateTime.now([your zone ID, e.g. ZoneId.systemDefault()])
    // month offset
    .minusMonths(2)
    // start at day 1
    .withDayOfMonth(1)
    // change time-of-day to when the day starts
    .truncatedTo(ChronoUnit.DAYS)
Run Code Online (Sandbox Code Playgroud)

本地

LocalDate.now([your zone ID, e.g. ZoneId.systemDefault()])
    .minusMonths(2)
    .withDayOfMonth(1)
Run Code Online (Sandbox Code Playgroud)

注意

我将月份偏移设置为2你想要4月份.