问题
我需要获得一个月的第一个日期(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;
}