如何循环浏览当年的每个月并获取每个月的第一个和最后一个日期

问题描述:

我想循环遍历给定年份或当年的所有月份,并获取每个月的第一个和最后一个日期。例如, 。本年是2017年和10月份。所以我想从2017年10月到2017年12月,取回每个月的第一个和最后一个日期,比如十月第一个日期是2017-10-01,最后一个日期是2017-10-31。如何循环浏览当年的每个月并获取每个月的第一个和最后一个日期

+0

与编程工作,解释你的问题 –

+2

提示:如果你能可能使用'java.time',这比使用java.util.Calendar'好多了。 –

+1

[获得给定字符串日期中的月份的最后一天]的可能重复(https://*.com/questions/13624442/getting-last-day-of-the-mon-in-given-string-date) –

使用日历(在所有的Java版本有效):

 Calendar cal = Calendar.getInstance(); 
     int month = cal.get(Calendar.MONTH); 
     int year = cal.get(Calendar.YEAR); 
     cal.clear(); 
     cal.set(Calendar.YEAR, year); 

     for (int currentMonth = month; currentMonth < 12; currentMonth++) { 

      cal.set(Calendar.MONTH, currentMonth); 

      //first day : 
      cal.set(Calendar.DAY_OF_MONTH, 1); 
      Date firstDay = cal.getTime(); 
      System.out.println("firstDay=" + firstDay); 

      //last day 
      cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 
      Date lastDay = cal.getTime(); 
      System.out.println("lastDay=" + lastDay); 
     } 

通过使用新的Java 8日期/时间API:

LocalDate date = LocalDate.now(); 
     int month = date.getMonthValue(); 

     for (int currentMonth = month; currentMonth <= 12; currentMonth++) { 
      date = date.withMonth(currentMonth); 

      //start of month : 
      LocalDate firstDay = date.withDayOfMonth(1); 
      System.out.println("firstDay=" + firstDay); 

      //end of month 
      LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); 
      System.out.println("lastDay=" + lastDay); 
     } 
+0

非常感谢你 –

+1

好的答案。 (月份:EnumSet.range(today.getMonth(this.getMonth())代替'for'循环使用'Month'枚举与'EnumSet','YearMonth'而不是'TemporalAdjuster':' ),Month.DECEMBER))'请参阅示例[在IdeOne.com上运行代码](https://www.ideone.com/G4BwY6) –

+0

欢迎您编辑我的帖子:) – Tuco