java 使用Calendar類計算每月有多少自然周,並輸出每週的開始和結束日期
阿新 • • 發佈:2019-01-14
思路:首先是獲取該月的實際天數,然後從1號遍歷直至該月最後一天,利用Calendar類找出該日是一週中的第幾天,
(1)若該日是週日,則視為一週結束,並用該日期減去6找到該周的開始日期,若相減結果小於等於1,則說明該周起始日期應該是本月1號。
(1)若該日不是週日,且是該月最後一天,則應該在上面計算的基礎上再加一週,視月末為該周的結束日,該周起始日期應為改日期減去改日
在一週中的位置加2,例如:2013-09-30號是週一,則視為9月份中的第六週,開始日期是30-2+2
提示:Calendar 類中視週日為一週的開始,值是1
示例程式碼:
public static void printfWeeks(String date) throws Exception { // String date = "2013-09"; DateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); Date date1 = dateFormat.parse(date); Calendar calendar = new GregorianCalendar(); calendar.setTime(date1); int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("days:" + days); int count = 0; for (int i = 1; i <= days; i++) { DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); Date date2 = dateFormat1.parse(date + "-" + i); calendar.clear(); calendar.setTime(date2); int k = new Integer(calendar.get(Calendar.DAY_OF_WEEK)); if (k == 1) {// 若當天是週日 count++; System.out.println("-----------------------------------"); System.out.println("第" + count + "周"); if (i - 6 <= 1) { System.out.println("本週開始日期:" + date + "-" + 1); } else { System.out.println("本週開始日期:" + date + "-" + (i - 6)); } System.out.println("本週結束日期:" + date + "-" + i); System.out.println("-----------------------------------"); } if (k != 1 && i == days) {// 若是本月最好一天,且不是週日 count++; System.out.println("-----------------------------------"); System.out.println("第" + count + "周"); System.out.println("本週開始日期:" + date + "-" + (i - k + 2)); System.out.println("本週結束日期:" + date + "-" + i); System.out.println("-----------------------------------"); } } }
測試程式碼:
public static void main(String[] args) throws Exception { String s = "2013-"; for (int i = 1; i <= 12; i++) { System.out.println("*******************************************"); System.out.println("月份:" + i); printfWeeks(s + i); System.out.println("*******************************************"); } // printfWeeks(s + 2); }
輸出結果:
*******************************************月份:1
days:31
-----------------------------------
第1周
本週開始日期:2013-1-1
本週結束日期:2013-1-6
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-1-7
本週結束日期:2013-1-13
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-1-14
本週結束日期:2013-1-20
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-1-21
本週結束日期:2013-1-27
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-1-28
本週結束日期:2013-1-31
-----------------------------------
*******************************************
*******************************************
月份:2
days:28
-----------------------------------
第1周
本週開始日期:2013-2-1
本週結束日期:2013-2-3
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-2-4
本週結束日期:2013-2-10
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-2-11
本週結束日期:2013-2-17
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-2-18
本週結束日期:2013-2-24
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-2-25
本週結束日期:2013-2-28
-----------------------------------
*******************************************
*******************************************
月份:3
days:31
-----------------------------------
第1周
本週開始日期:2013-3-1
本週結束日期:2013-3-3
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-3-4
本週結束日期:2013-3-10
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-3-11
本週結束日期:2013-3-17
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-3-18
本週結束日期:2013-3-24
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-3-25
本週結束日期:2013-3-31
-----------------------------------
*******************************************
*******************************************
月份:4
days:30
-----------------------------------
第1周
本週開始日期:2013-4-1
本週結束日期:2013-4-7
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-4-8
本週結束日期:2013-4-14
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-4-15
本週結束日期:2013-4-21
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-4-22
本週結束日期:2013-4-28
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-4-29
本週結束日期:2013-4-30
-----------------------------------
*******************************************
*******************************************
月份:5
days:31
-----------------------------------
第1周
本週開始日期:2013-5-1
本週結束日期:2013-5-5
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-5-6
本週結束日期:2013-5-12
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-5-13
本週結束日期:2013-5-19
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-5-20
本週結束日期:2013-5-26
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-5-27
本週結束日期:2013-5-31
-----------------------------------
*******************************************
*******************************************
月份:6
days:30
-----------------------------------
第1周
本週開始日期:2013-6-1
本週結束日期:2013-6-2
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-6-3
本週結束日期:2013-6-9
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-6-10
本週結束日期:2013-6-16
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-6-17
本週結束日期:2013-6-23
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-6-24
本週結束日期:2013-6-30
-----------------------------------
*******************************************
*******************************************
月份:7
days:31
-----------------------------------
第1周
本週開始日期:2013-7-1
本週結束日期:2013-7-7
-----------------------------------
-----------------------------------
第2周
本週開始日期:2013-7-8
本週結束日期:2013-7-14
-----------------------------------
-----------------------------------
第3周
本週開始日期:2013-7-15
本週結束日期:2013-7-21
-----------------------------------
-----------------------------------
第4周
本週開始日期:2013-7-22
本週結束日期:2013-7-28
-----------------------------------
-----------------------------------
第5周
本週開始日期:2013-7-29
本週結束日期:2013-7-31
-----------------------------------
*******************************************
*******************************************
月份:8
days:31
-----------------------------------
第1周
本週開始日期:2013-8-1
本週結束日期:2013-8-4
-----------------------------------
-----------------------------------
第2周