如何使用JodaTime获取特定月份的最后日期?


110

我需要获取org.joda.time.LocalDate一个月的第一个日期(如)和最后一个日期。获取第一个是微不足道的,但是获取最后一个似乎需要一定的逻辑,因为月份的长度不同,而2月的长度甚至会随年份而变化。是否已经在JodaTime中内置了此功能,还是应该自己实现?


2
单挑,这也适用于DateTime类型:)
vikingsteve 2014年

Answers:


222

怎么样:

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

dayOfMonth()LocalDate.Property以知道来源的方式,返回代表“月中的月”字段的LocalDate

碰巧的是,该withMaximumValue()方法甚至记录在案,以推荐用于此特定任务:

由于月份长度不同,此操​​作对于在每月的最后一天获取LocalDate很有用。

LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();

1
@Jon Skeet如何使用Java 8的新Date and Time API来获得它?
沃伦·诺科斯

5
@ WarrenM.Nocos:我会用dt.with(TemporalAdjusters.lastDayOfMonth())
乔恩·斯基特

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);

4
如果您的月= 12,会发生什么?
jon

JodaTime API是一项复杂,完全加载且方便的工作。还有许多其他更正确的方法可以完成此操作。
aaiezza

如果月份是12,那么您知道最后一天是31,对吗?只是这样写:if(month <12){answer = new DateTime(year,month + 1,1,0,0,0); answer = answer.minusDays(1); } else答案= 31;
亚伯拉罕·马尔多纳多·巴里奥斯

1

一个老问题,但是当我寻找这个时,谷歌搜索结果最好。

如果有人需要实际的最后一天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;
}

1
我希望有一个更简洁的答案,例如:public static int getLastDayOfMonth(int year,int month){LocalDate date = new LocalDate(year,month,1 return date.dayOfMonth()。getMaximumValue();}但是您的答案即使有一点混乱也非常有用,所以+1;)
jumps4fun 18-10-18

-1

使用JodaTime,我们可以这样做:

    公共静态最终整数CURRENT_YEAR = DateTime.now()。getYear();

    公共静态最终整数CURRENT_MONTH = DateTime.now()。getMonthOfYear();

    公共静态最终整数LAST_DAY_OF_CURRENT_MONTH = DateTime.now()
            .dayOfMonth()。getMaximumValue();

    公共静态最终整数LAST_HOUR_OF_CURRENT_DAY = DateTime.now()
            .hourOfDay()。getMaximumValue();

    公共静态最终整数LAST_MINUTE_OF_CURRENT_HOUR = DateTime.now()。minuteOfHour()。getMaximumValue();

    公共静态最终整数LAST_SECOND_OF_CURRENT_MINUTE = DateTime.now()。secondOfMinute()。getMaximumValue();


    公共静态DateTime getLastDateOfMonth(){
        返回新的DateTime(CURRENT_YEAR,CURRENT_MONTH,
                LAST_DAY_OF_CURRENT_MONTH,LAST_HOUR_OF_CURRENT_DAY,
                LAST_MINUTE_OF_CURRENT_HOUR,LAST_SECOND_OF_CURRENT_MINUTE);
    }

如我在github上的要点所述: 具有许多有用功能的JodaTime和java.util.Date Util类。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.