java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期

jopen 11年前

思路:首先是获取该月的实际天数,然后从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周
本周开始日期:2013-8-5
本周结束日期:2013-8-11
-----------------------------------
-----------------------------------
第3周
本周开始日期:2013-8-12
本周结束日期:2013-8-18
-----------------------------------
-----------------------------------
第4周
本周开始日期:2013-8-19
本周结束日期:2013-8-25
-----------------------------------
-----------------------------------
第5周
本周开始日期:2013-8-26
本周结束日期:2013-8-31
-----------------------------------
***
***
月份:9
days:30
-----------------------------------
第1周
本周开始日期:2013-9-1
本周结束日期:2013-9-1
-----------------------------------
-----------------------------------
第2周
本周开始日期:2013-9-2
本周结束日期:2013-9-8
-----------------------------------
-----------------------------------
第3周
本周开始日期:2013-9-9
本周结束日期:2013-9-15
-----------------------------------
-----------------------------------
第4周
本周开始日期:2013-9-16
本周结束日期:2013-9-22
-----------------------------------
-----------------------------------
第5周
本周开始日期:2013-9-23
本周结束日期:2013-9-29
-----------------------------------
-----------------------------------
第6周
本周开始日期:2013-9-30
本周结束日期:2013-9-30
-----------------------------------
***
***
月份:10
days:31
-----------------------------------
第1周
本周开始日期:2013-10-1
本周结束日期:2013-10-6
-----------------------------------
-----------------------------------
第2周
本周开始日期:2013-10-7
本周结束日期:2013-10-13
-----------------------------------
-----------------------------------
第3周
本周开始日期:2013-10-14
本周结束日期:2013-10-20
-----------------------------------
-----------------------------------
第4周
本周开始日期:2013-10-21
本周结束日期:2013-10-27
-----------------------------------
-----------------------------------
第5周
本周开始日期:2013-10-28
本周结束日期:2013-10-31
-----------------------------------
***
***
月份:11
days:30
-----------------------------------
第1周
本周开始日期:2013-11-1
本周结束日期:2013-11-3
-----------------------------------
-----------------------------------
第2周
本周开始日期:2013-11-4
本周结束日期:2013-11-10
-----------------------------------
-----------------------------------
第3周
本周开始日期:2013-11-11
本周结束日期:2013-11-17
-----------------------------------
-----------------------------------
第4周
本周开始日期:2013-11-18
本周结束日期:2013-11-24
-----------------------------------
-----------------------------------
第5周
本周开始日期:2013-11-25
本周结束日期:2013-11-30
-----------------------------------
***
***
月份:12
days:31
-----------------------------------
第1周
本周开始日期:2013-12-1
本周结束日期:2013-12-1
-----------------------------------
-----------------------------------
第2周
本周开始日期:2013-12-2
本周结束日期:2013-12-8
-----------------------------------
-----------------------------------
第3周
本周开始日期:2013-12-9
本周结束日期:2013-12-15
-----------------------------------
-----------------------------------
第4周
本周开始日期:2013-12-16
本周结束日期:2013-12-22
-----------------------------------
-----------------------------------
第5周
本周开始日期:2013-12-23
本周结束日期:2013-12-29
-----------------------------------
-----------------------------------
第6周
本周开始日期:2013-12-30
本周结束日期:2013-12-31