如何从YearMonth日期获取月份的最后一天?

时间:2015-12-08 19:50:50

标签: jodatime

我要将YearMonth日期转换为LocalDate,这将是该月的最后一天。所以我需要使用toLocalDate(int i)方法。如何使用yearMonth实例将该月的最后一天传递给该方法?

3 个答案:

答案 0 :(得分:0)

如果没有简单地拥有array个数字,您可以使用以下内容以编程方式找出它:

if (month == 2 && year % 4 == 0)
    return 29;
else if (month == 2)
    return 28;
else {
    if (month > 7)
        month -= 1;
    if (month % 2 == 0) //Month number is even
        return 30;
    else
        return 31;
}

所以要完成这个:

  1. 首先,你要检查它是否是2月,这是闰年。
  2. 接下来你只是检查它是否是二月。
  3. 之后,您正在查看月份是8月还是更晚,因为那是31天的月份开始。如果是这种情况,您基本上会从偶数中更改月份数​​,反之亦然。
  4. 最后,您运行月份编号(编辑与否,取决于是否为8月或之后),以查看它是偶数还是奇数,最终决定最后一天。
  5. 示例:2015年2月。month = 2year = 2015month确实等于2year % 4等于3。最终结果return 28

    示例2:2015年10月。month = 10year = 2015month大于7,因此month = 9month很奇怪,最终结果为return 31

答案 1 :(得分:0)

您可以使用dateTime.dayOfMonth().getMaximumValue()来获取当月和当年的最后一天。

public class Test {

    public static void main(String[] args) {

        YearMonth ym = new YearMonth();
        System.out.println(ym);
        int dayCount = daysOfMonth(ym.getYear(), ym.getMonthOfYear());
        LocalDate localDate = new LocalDate(ym.getYear(), ym.getMonthOfYear(), dayCount);
        System.out.println(localDate);
    }

    public static int daysOfMonth(int year, int month) {
        DateTime dateTime = new DateTime(year, month, 14, 12, 0, 0, 000);
        return dateTime.dayOfMonth().getMaximumValue();
    }
}

此外,您只需更改主要方法部分(无需更改daysOfMonth方法)

public static void main(String[] args) {

    YearMonth ym = new YearMonth();
    System.out.println(ym);
    LocalDate endOfMonth = ym.toLocalDate(daysOfMonth(ym.getYear(), ym.getMonthOfYear()));
    System.out.println(endOfMonth);
}

答案 2 :(得分:0)

最后我提出了这个解决方案:

 yearMonth.toLocalDate(yearMonth.plusMonths(1).toLocalDate(1).minusDays(1).getDayOfMonth())

我需要获得下个月的第一天,然后使用minusDays(1)方法从中减去1天。