2017-10-13 49 views
-9

我想循環遍歷給定年份或當年的所有月份,並獲取每個月的第一個和最後一個日期。例如, 。本年是2017年和10月份。所以我想從2017年10月到2017年12月,取回每個月的第一個和最後一個日期,比如十月第一個日期是2017-10-01,最後一個日期是2017-10-31。如何循環瀏覽當年的每個月並獲取每個月的第一個和最後一個日期

+0

與編程工作,解釋你的問題 –

+2

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

+1

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

回答

1

使用日曆(在所有的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

相關問題