java.util.Calendar獲取時間區間問題


雖然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沒有直接獲取季度的方法,季度的區間需要自己定義,其實就是獲取當前月,然后自己定義每個月屬於哪個季度,並返回季度首尾的月份;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM