/**
* @包名 :sys.schedual.util<br>
* @文件名 :SchedualUtil.java<br>
* @类描述 :排班帮助类<br>
* @作者 :Andy.wang<br>
* @创建时间 :2015-1-18下午07:20:31<br>
* @更改人 :<br>
* @更改时间 :<br>
*/
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<br>
* 方法描述 :返回固定条件设置的Calendar对象。<br>
* Calendar对象设置项:设置每周的第一天为周一;设置每周从周一开始;设置每周至少7天<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午10:51:49 <br>
*
* @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<br>
* 方法描述 :输入年、周,计算本周7天的日期<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-18下午07:21:25 <br>
*
* @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<br>
* 方法描述 :输入年、周,计算本周第一天的日期<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午09:58:57 <br>
*
* @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<br>
* 方法描述 :输入年、周,计算本周最后一天的日期<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午10:56:41 <br>
*
* @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<br>
* 方法描述 :输入年份,获取一年有多少个周<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午10:57:08 <br>
*
* @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<br>
* 方法描述 :输入年份,计算该年份每周的开始日期到结束日期<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午10:58:04 <br>
*
* @param year
* @return 返回类型 :List<String[]>
*/
public static List<String[]> getWeeksByYear(final int year) {
int weeks = getWeekNumByYear(year);
List<String[]> result = new ArrayList<String[]>(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<br>
* 方法描述 :输入年份,月数,获取有多少天<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午11:16:56 <br>
*
* @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<br>
* 方法描述 :输入年份,月数,获取有多少周<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午11:21:22 <br>
*
* @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<br>
* 方法描述 :格式化转换日期类型<br>
* 创建者 :Andy.wang<br>
* 创建时间 :2015-1-20上午09:51:42 <br>
*
* @param date
* @return 返回类型 :String
*/
public static String getFormatDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DateFormat);
return dateFormat.format(date);
}
}
测试类:CalendarUtilTest.java
/**
* @包名 :sys.schedual.unittest<br>
* @文件名 :CalendarUtilTest.java<br>
* @类描述 :<br>
* @作者 :Andy.wang<br>
* @创建时间 :2015-1-20上午10:49:47<br>
* @更改人 :<br>
* @更改时间 :<br>
*/
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<String[]> 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