雖然java8的LocalDate已經出來,但是很多項目以及自己習慣上還是使用Date,這里還是簡單介紹一下如何通過java.util.Calendar獲取時間區間.
1 通過calendar.getActualMinimum,getActualMaximum獲取周,月,年的最大值,最小值
1 /** 2 * @Title: getSeasonFrist 3 * @Description: 獲取季度初日期 4 * @param calendar 5 * @return 6 * @throws ParseException 7 */ 8 public static String getSeasonFrist(Calendar calendar) throws ParseException { 9 int month = calendar.get(Calendar.MONTH); 10 int season = getSeason(month, 0); 11 calendar.set(Calendar.DAY_OF_MONTH, 0); 12 calendar.set(Calendar.MONTH, season); 13 calendar.add(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); 14 return sdf.format(calendar.getTime()); 15 } 16 17 /** 18 * @Title: getSeasonLast 19 * @Description: 獲取季度末日期時間 20 * @param calendar 21 * @return 22 * @throws ParseException 23 */ 24 public static String getSeasonLast(Calendar calendar) throws ParseException { 25 int month = calendar.get(Calendar.MONTH); 26 int season = getSeason(month, 1); 27 calendar.set(Calendar.MONTH, season); 28 calendar.set(Calendar.DAY_OF_MONTH, -1); 29 calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 30 return sdf.format(calendar.getTime()); 31 }
問題,因為直接設置月份,除了月份其他信息沒有改,會造成獲取月份最大值不准確,即當前月是9月,我把月份改成10,但是9月的最大天數是30,所以獲取月份最后一天就是:10月30日
方式二:通過獲取下月月初減一的方式獲取區間最后一天,這種方式可簡單有效解決月末日期不准確問題
1 /** 2 * @Title: getSeasonFrist 3 * @Description: 獲取季度初日期 4 * @param calendar 5 * @return 6 * @throws ParseException 7 */ 8 public static String getSeasonFrist(Calendar calendar) throws ParseException { 9 int month = calendar.get(Calendar.MONTH); 10 int season = getSeason(month, 0); 11 calendar.set(Calendar.MONTH, season); 12 calendar.set(Calendar.DAY_OF_MONTH, 1); 13 return sdf.format(calendar.getTime()); 14 } 15 16 /** 17 * @Title: getSeasonLast 18 * @Description: 獲取季度末日期時間 19 * @param calendar 20 * @return 21 * @throws ParseException 22 */ 23 public static String getSeasonLast(Calendar calendar) throws ParseException { 24 int month = calendar.get(Calendar.MONTH); 25 int season = getSeason(month, 1); 26 calendar.set(Calendar.MONTH, season + 1); 27 calendar.set(Calendar.DAY_OF_MONTH, 0); 28 return sdf.format(calendar.getTime()); 29 }
這里用季度的例子舉例,月和年類似;因為calendar沒有直接獲取季度的方法,季度的區間需要自己定義,其實就是獲取當前月,然后自己定義每個月屬於哪個季度,並返回季度首尾的月份;