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

时间:2012-03-14 22:45:09

标签: java scala jodatime

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

4 个答案:

答案 0 :(得分:207)

怎么样:

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

dayOfMonth()返回一个LocalDate.Property,代表“日期”字段,其方式知道原始LocalDate

碰巧,withMaximumValue()方法甚至是documented推荐用于此特定任务:

  

此操作对于在月份的最后一天获取LocalDate非常有用,因为月份长度会有所不同。

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

答案 1 :(得分: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);

答案 2 :(得分:1)

一个老问题,但是当我正在寻找这个时,这是一个google的最佳结果。

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

答案 3 :(得分:-1)

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


    public static final Integer CURRENT_YEAR = DateTime.now().getYear();

    public static final Integer CURRENT_MONTH = DateTime.now().getMonthOfYear();

    public static final Integer LAST_DAY_OF_CURRENT_MONTH = DateTime.now()
            .dayOfMonth().getMaximumValue();

    public static final Integer LAST_HOUR_OF_CURRENT_DAY = DateTime.now()
            .hourOfDay().getMaximumValue();

    public static final Integer LAST_MINUTE_OF_CURRENT_HOUR = DateTime.now().minuteOfHour().getMaximumValue();

    public static final Integer LAST_SECOND_OF_CURRENT_MINUTE = DateTime.now().secondOfMinute().getMaximumValue();


    public static DateTime getLastDateOfMonth() {
        return new 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的小小提示中所描述的那样:A JodaTime and java.util.Date Util Class with a lot of usefull functions.