2015-12-08 319 views

回答

0

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

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

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

+0

恭喜!你能否将自己的答案标记为解决方案? :) –

0

短的仅仅拥有数量的array,你可以以编程弄清楚使用如下的内容:

  1. 你检查,第一:

    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; 
    } 
    

    所以要通过这个走看看它是不是二月,这是一个闰年。

  2. 接下来,您只需检查是否是二月。
  3. 之后,您需要查看月份是否为8月或更晚,因为那是31天的月份重新开始的时间。如果是这种情况,则基本上将月份数字从偶数改为数字,反之亦然。
  4. 最后,运行月份编号(编辑与否,取决于是否是8月或以后),以查看它是偶数还是奇数,最终决定最后一天。

示例:2015年2月。month = 2year = 2015month确实等于2,但year % 4等于3。最终结果,return 28

实施例2:十月,2015年month = 10year = 2015month大于7,所以month = 9month很奇怪,所以最终结果为return 31

+0

这是错误的,因为它会给你的日期像1900-2-29 – Zee

+0

如果你解析出年和月是可用的,那就没有问题了。 –

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); 
} 
相关问题