Мне нужно получить первую дату (как org.joda.time.LocalDate
) месяца и последнего. Получение первого элемента тривиально, но получение последнего, похоже, требует некоторой логики, поскольку месяцы имеют разную длину, а февральская длина даже колеблется в течение многих лет. Есть ли механизм для этого уже встроенного в JodaTime или я должен сам его реализовать?
Как насчет:
LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();
dayOfMonth()
возвращает a LocalDate.Property
, который представляет поле "день месяца" способом, который знает исходный LocalDate
.
Как это бывает, метод withMaximumValue()
даже документирован, чтобы рекомендовать его для этой конкретной задачи:
Эта операция полезна для получения LocalDate в последний день месяца, так как длина месяца изменяется.
LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();
dt.with(TemporalAdjusters.lastDayOfMonth())
Еще один простой способ:
//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);
Старый вопрос, но лучший результат 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;
}
Используя 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 с множеством полезных функций.
DateTime
:)