问题

我需要获得一个月的第一个日期(asorg.joda.time.LocalDate)和最后一个日期。获得第一个是微不足道的,但是获得最后一个似乎需要一些逻辑,因为几个月有不同的长度,二月长度甚至多年来变化。是否有一个已经内置于JodaTime的机制或我应该自己实现它?


#1 热门回答(194 赞)

怎么样:

LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();

dayOfMonth()返回aLocalDate.Property,它以一种知道originLocalDate的方式表示"日期"字段。

实际上,1834341861方法甚至是documented推荐它用于这个特定的任务:

此操作对于在月份的最后一天获取LocalDate非常有用,因为月份长度会有所不同。 LocalDate lastDayOfMonth = dt.dayOfMonth()。withMaximumValue();


#2 热门回答(4 赞)

另一个简单的方法是:

//Set the Date in First of the next Month:
answer = new DateTime(year,month+1,1,0,0,0);
//Now take away one day and now you have the last day in the month correctly
answer = answer.minusDays(1);

#3 热门回答(0 赞)

一个老问题,但当我正在寻找这个时,谷歌的结果。

如果有人需要实际的最后一天作为int而不是使用JodaTime你可以这样做:

public static final int JANUARY = 1;

public static final int DECEMBER = 12;

public static final int FIRST_OF_THE_MONTH = 1;

public final int getLastDayOfMonth(final int month, final int year) {
    int lastDay = 0;

    if ((month >= JANUARY) && (month <= DECEMBER)) {
        LocalDate aDate = new LocalDate(year, month, FIRST_OF_THE_MONTH);

        lastDay = aDate.dayOfMonth().getMaximumValue();
    }

    return lastDay;
}

原文链接