上个月的最后日期,返回5月的30天

Mdh*_*r9e 2 java date

我正在使用以下代码检索上个月的最后一天-例如:5月。但是它返回的是30天而不是31天。

下面给出的代码

package net.vcmg.date;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.time.DateUtils;

public class LastDayPreviousMonth {
    public static void main(String[] args) {
        Date lastDateOfPreviousMonth = addMonths(lastDayOfTheMonth(today()), -1);
        System.out.println("lastDateOfPreviousMonth: "+lastDateOfPreviousMonth);

    }

    //the below method is from Utils.java
    public static Date lastDayOfTheMonth(Date d) {
           Calendar cal = Calendar.getInstance();
           cal.setTime(d);
           int actualMax = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
           cal.set(Calendar.DAY_OF_MONTH, actualMax);
           return cal.getTime();
    }

    public static Date addMonths(Date date, int numMonths)
    {
        return DateUtils.addMonths(date, numMonths);
    }

    public static Date today()
    {
        return truncDate(now());
    }

    public static Date now()
    {
        // will cut-off milliseconds
        return new Date( (System.currentTimeMillis()/1000) * 1000);
    }

    public static Date truncDate (Date date) {
        return DateUtils.truncate(date, Calendar.DATE);
    }

}
Run Code Online (Sandbox Code Playgroud)

在这里,当我在main方法中调用lastDateOfPreviousMonth时,它仅返回30天。不是31号,实际上可能包含31天。请帮忙。

But*_*Dan 6

Java 8

如果您不限制使用旧版本Date,则最好使用新版本java.time.LocalDate

LocalDate previousMonth = LocalDate.now().minusMonths(1);

LocalDate start = previousMonth.withDayOfMonth(1);
LocalDate end = previousMonth.withDayOfMonth(previousMonth.lengthOfMonth());
System.out.println(start);
System.out.println(end);
Run Code Online (Sandbox Code Playgroud)

输出量

2019-05-01
2019-05-31
Run Code Online (Sandbox Code Playgroud)

编辑

为了您的实施,更改方法的顺序

  1. addMonths-获取当前日期并提供上个月 addMonths(new Date(), -1)
  2. lastDayOfTheMonth-获取上个月的最后一天 lastDayOfTheMonth(addMonths(new Date(), -1))
Date lastDateOfPreviousMonth = lastDayOfTheMonth(addMonths(new Date(), -1));
Run Code Online (Sandbox Code Playgroud)

输出量

lastDateOfPreviousMonth: Fri May 31 10:46:13 EEST 2019
Run Code Online (Sandbox Code Playgroud)