/** * @包名 :sys.schedual.util * @文件名 :SchedualUtil.java * @类描述 :排班帮助类 * @作者 :Andy.wang * @创建时间 :2015-1-18下午07:20:31 * @更改人 : * @更改时间 : */package sys.schedual.util;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;/** * @author :Andy.wang */public class CalendarUtil { public static final String DateFormat = "yyyy-MM-dd";// 日期格式 /** * * 方法名 :getCalendar * 方法描述 :返回固定条件设置的Calendar对象。 * Calendar对象设置项:设置每周的第一天为周一;设置每周从周一开始;设置每周至少7天 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午10:51:49 * * @return 返回类型 :Calendar */ public static Calendar getCalendar() { Calendar cal = Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置每周的第一天为周一 cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置每周从周一开始 cal.setMinimalDaysInFirstWeek(7);// 设置每周至少7天 return cal; } /** * * 方法名 :getWeekDays * 方法描述 :输入年、周,计算本周7天的日期 * 创建者 :Andy.wang * 创建时间 :2015-1-18下午07:21:25 * * @param year * :年份 * @param yearWeek * :周数 * @return 返回类型 :String[] */ public static String[] getWeekDays(int year, int yearWeek) { String[] str = new String[7]; Calendar cal = getCalendar(); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR, yearWeek); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); cal.add(Calendar.DATE, cal.getActualMinimum(Calendar.DAY_OF_WEEK) - dayOfWeek); for (int i = 0; i < str.length; i++) { cal.add(Calendar.DATE, 1); Date d = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("MM/dd"); str[i] = sdf.format(d); } return str; } /** * * 方法名 :getYearWeekFirstDay * 方法描述 :输入年、周,计算本周第一天的日期 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午09:58:57 * * @param year * :年份 * @param yearWeek * :周数 * @return 返回类型 :String */ public static String getYearWeekFirstDay(int year, int yearWeek) { Calendar calendar = getCalendar(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.WEEK_OF_YEAR, yearWeek); return getFormatDate(calendar.getTime()); } /** * * 方法名 :getYearWeekEndDay * 方法描述 :输入年、周,计算本周最后一天的日期 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午10:56:41 * * @param year * :年份 * @param yearWeek * :周数 * @return 返回类型 :String */ public static String getYearWeekEndDay(int year, int yearWeek) { Calendar calendar = Calendar.getInstance(); // 下面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 calendar.setFirstDayOfWeek(Calendar.MONDAY);// 设置每周的第一天为周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置每周从周一开始 calendar.setMinimalDaysInFirstWeek(7);// 设置每周至少7天 calendar.set(Calendar.YEAR, year); calendar.set(Calendar.WEEK_OF_YEAR, yearWeek); return getFormatDate(calendar.getTime()); } /** * * 方法名 :getWeekNumByYear * 方法描述 :输入年份,获取一年有多少个周 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午10:57:08 * * @param year * @return 返回类型 :int */ public static int getWeekNumByYear(final int year) { int result = 52;// 每年至少有52个周 ,最多有53个周。 String date = getYearWeekFirstDay(year, 53); if (date.substring(0, 4).equals(year + "")) { // 判断年度是否相符,如果相符说明有53个周。 result = 53; } return result; } /** * * 方法名 :getWeeksByYear * 方法描述 :输入年份,计算该年份每周的开始日期到结束日期 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午10:58:04 * * @param year * @return 返回类型 :List*/ public static List getWeeksByYear(final int year) { int weeks = getWeekNumByYear(year); List result = new ArrayList (weeks); for (int i = 1; i <= weeks; i++) { String[] tempWeek = new String[2]; tempWeek[0] = getYearWeekFirstDay(year, i); tempWeek[1] = getYearWeekEndDay(year, i); result.add(tempWeek); } return result; } /** * * 方法名 :getDaysOfMonth * 方法描述 :输入年份,月数,获取有多少天 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午11:16:56 * * @param year * @param month * @return 返回类型 :int */ public static int getDaysOfMonth(int year, int month) { Calendar calendar = getCalendar(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month);// 月份从0开始 return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * * 方法名 :getWeeksOfMonth * 方法描述 :输入年份,月数,获取有多少周 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午11:21:22 * * @param year * :年份 * @param month * :月份 * @return 返回类型 :int */ public static int getWeeksOfMonth(int year, int month) { Calendar calendar = getCalendar(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month);// 月份从0开始 return calendar.getActualMaximum(Calendar.WEEK_OF_MONTH); } /** * * 方法名 :getFormatDate * 方法描述 :格式化转换日期类型 * 创建者 :Andy.wang * 创建时间 :2015-1-20上午09:51:42 * * @param date * @return 返回类型 :String */ public static String getFormatDate(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat(DateFormat); return dateFormat.format(date); }}
测试类:CalendarUtilTest.java
/** * @包名 :sys.schedual.unittest * @文件名 :CalendarUtilTest.java * @类描述 : * @作者 :Andy.wang * @创建时间 :2015-1-20上午10:49:47 * @更改人 : * @更改时间 : */package sys.schedual.unittest;import java.util.List;import org.junit.Test;import sys.schedual.util.CalendarUtil;/** * @author :Andy.wang */public class CalendarUtilTest { @Test public void test() { int year = 2015, yearWeek = 1, month = 1; String yearWeekFirstDay = CalendarUtil.getYearWeekFirstDay(year, yearWeek); System.out.println(year + "年第" + yearWeek + "周的第一天日期是:" + yearWeekFirstDay); System.out.println(".............................."); String yearWeekEndDay = CalendarUtil.getYearWeekEndDay(year, yearWeek); System.out.println(year + "年第" + yearWeek + "周的最后一天日期是:" + yearWeekEndDay); System.out.println(".............................."); int weekNumByYear = CalendarUtil.getWeekNumByYear(year); System.out.println(year + "年共有" + weekNumByYear + "周"); System.out.println(".............................."); int days = CalendarUtil.getDaysOfMonth(year, month); System.out.println(year + "年" + month + "月,共" + days + "天"); System.out.println(".............................."); int weeks = CalendarUtil.getWeeksOfMonth(year, month); System.out.println(year + "年" + month + "月,共" + weeks + "周"); System.out.println(".............................."); List测试结果:list = CalendarUtil.getWeeksByYear(year); for (int i = 1; i <= list.size(); i++) { System.out.println("第" + i + "周:" + list.get(i - 1)[0] + " ~ " + list.get(i - 1)[1]); } System.out.println(".............................."); String[] str = CalendarUtil.getWeekDays(year, yearWeek); System.out.println(year + "年第" + yearWeek + "周日期是"); for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } }}
2015年第1周的第一天日期是:2015-01-05
.............................. 2015年第1周的最后一天日期是:2015-01-11 .............................. 2015年共有52周 .............................. 2015年1月,共28天 .............................. 2015年1月,共4周 .............................. 第1周:2015-01-05 ~ 2015-01-11 第2周:2015-01-12 ~ 2015-01-18 第3周:2015-01-19 ~ 2015-01-25 第4周:2015-01-26 ~ 2015-02-01 第5周:2015-02-02 ~ 2015-02-08 第6周:2015-02-09 ~ 2015-02-15 第7周:2015-02-16 ~ 2015-02-22 第8周:2015-02-23 ~ 2015-03-01 第9周:2015-03-02 ~ 2015-03-08 第10周:2015-03-09 ~ 2015-03-15 第11周:2015-03-16 ~ 2015-03-22 第12周:2015-03-23 ~ 2015-03-29 第13周:2015-03-30 ~ 2015-04-05 第14周:2015-04-06 ~ 2015-04-12 第15周:2015-04-13 ~ 2015-04-19 第16周:2015-04-20 ~ 2015-04-26 第17周:2015-04-27 ~ 2015-05-03 第18周:2015-05-04 ~ 2015-05-10 第19周:2015-05-11 ~ 2015-05-17 第20周:2015-05-18 ~ 2015-05-24 第21周:2015-05-25 ~ 2015-05-31 第22周:2015-06-01 ~ 2015-06-07 第23周:2015-06-08 ~ 2015-06-14 第24周:2015-06-15 ~ 2015-06-21 第25周:2015-06-22 ~ 2015-06-28 第26周:2015-06-29 ~ 2015-07-05 第27周:2015-07-06 ~ 2015-07-12 第28周:2015-07-13 ~ 2015-07-19 第29周:2015-07-20 ~ 2015-07-26 第30周:2015-07-27 ~ 2015-08-02 第31周:2015-08-03 ~ 2015-08-09 第32周:2015-08-10 ~ 2015-08-16 第33周:2015-08-17 ~ 2015-08-23 第34周:2015-08-24 ~ 2015-08-30 第35周:2015-08-31 ~ 2015-09-06 第36周:2015-09-07 ~ 2015-09-13 第37周:2015-09-14 ~ 2015-09-20 第38周:2015-09-21 ~ 2015-09-27 第39周:2015-09-28 ~ 2015-10-04 第40周:2015-10-05 ~ 2015-10-11 第41周:2015-10-12 ~ 2015-10-18 第42周:2015-10-19 ~ 2015-10-25 第43周:2015-10-26 ~ 2015-11-01 第44周:2015-11-02 ~ 2015-11-08 第45周:2015-11-09 ~ 2015-11-15 第46周:2015-11-16 ~ 2015-11-22 第47周:2015-11-23 ~ 2015-11-29 第48周:2015-11-30 ~ 2015-12-06 第49周:2015-12-07 ~ 2015-12-13 第50周:2015-12-14 ~ 2015-12-20 第51周:2015-12-21 ~ 2015-12-27 第52周:2015-12-28 ~ 2016-01-03 .............................. 2015年第1周日期是 01/05 01/06 01/07 01/08 01/09 01/10 01/11