代码:
/** * 获取当前月自然周数,并返回每周开始日期和每周结束日期 * @param date 2013-9 : 1-1,2-8,9-15,16-22,23-29,30-30 * @return * @throws Exception */ public static String getWeeks(String date){ StringBuilder sb = new StringBuilder(""); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); Date date1 = null; try { date1 = dateFormat.parse(date); } catch (ParseException e) { System.out.println("获取当前月自然周,日期格式转换错误!11"); e.printStackTrace(); } Calendar calendar = new GregorianCalendar(); calendar.setTime(date1); int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int count = 0; for (int i = 1; i <= days; i++) { DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); Date date2 = null; try { date2 = dateFormat1.parse(date + "-" + i); } catch (ParseException e) { System.out.println("获取当前月自然周,日期格式转换错误!22"); e.printStackTrace(); } calendar.clear(); calendar.setTime(date2); int k = new Integer(calendar.get(Calendar.DAY_OF_WEEK)); int startDay = 0; int endDay = 0; // 若当天是周日 if (k == 1) { count++; if (i - 6 <= 1) { startDay = 1; } else { startDay = i - 6; } endDay = i; } // 若是本月最好一天,且不是周日 if (k != 1 && i == days) { count++; startDay = i - k + 2; endDay = i; } if(startDay != 0 && endDay != 0){ if(sb.toString() == null || "".equals(sb.toString())){ sb.append(startDay + "-" + endDay); }else{ sb.append("," + startDay + "-" + endDay); } } } System.out.println(date + "共计" + count + "周,结果=" + sb.toString()); return sb.toString(); }
输出:
getWeeks("2013-9");
getWeeks("2019-08");
2013-9共计6周,结果=1-1,2-8,9-15,16-22,23-29,30-30 2019-08共计5周,结果=1-4,5-11,12-18,19-25,26-31
ps(吐槽):
奇葩方法来源于奇葩需求,奇葩需求来源于奇葩业务!!
原文:https://www.cnblogs.com/huakaiyoushi/p/11420209.html