Как получить последнюю дату определенного месяца с помощью JodaTime? - программирование
Подтвердить что ты не робот

Как получить последнюю дату определенного месяца с помощью JodaTime?

Мне нужно получить первую дату (как org.joda.time.LocalDate) месяца и последнего. Получение первого элемента тривиально, но получение последнего, похоже, требует некоторой логики, поскольку месяцы имеют разную длину, а февральская длина даже колеблется в течение многих лет. Есть ли механизм для этого уже встроенного в JodaTime или я должен сам его реализовать?

4b9b3361

Ответ 1

Как насчет:

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

dayOfMonth() возвращает a LocalDate.Property, который представляет поле "день месяца" способом, который знает исходный LocalDate.

Как это бывает, метод withMaximumValue() даже документирован, чтобы рекомендовать его для этой конкретной задачи:

Эта операция полезна для получения LocalDate в последний день месяца, так как длина месяца изменяется.

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

Ответ 2

Еще один простой способ:

//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

Старый вопрос, но лучший результат 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;
}

Ответ 4

Используя 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: JodaTime и java.util.Date Util Class с множеством полезных функций.