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