前段时间,17年11月份,化工项目中,客户提出要有按周统计的报表。所以搜了下日期中周相关的资料整合下。
有两个属性非常重要。
1是默认每年的1号所在的那一周,是当年的第一周。此属性当周跨年时会用到。
2是默认周日是每周的第一天。
这俩个属性根据需要设置好后,周相关的取值与计算就非常简单了。
/*
周跨年时,项目中用的是周末在哪年,本周就算到哪年。如果按照周一在哪年,本周就算到哪年。可以设置以下两个属性:
设置每年7号所在的周为第一周(如果不设置此项,默认是1号,则等同于跨年时,周末在哪年,本周就算到哪年)
cl.setMinimalDaysInFirstWeek(7);
设置每周的第一天为星期一
cl.setFirstDayOfWeek(Calendar.MONDAY);
*/
/**
* 2017.11.16 yk
* 传入日期,返回日期所属的周数
* 规则:按中国习惯,周一到周日为一周。 跨年时,按照周末那天所在的年份,算到那年
* @paramdateStryyyy-MM-dd
* @return yyyy-WW
*/
public static String getWeekByDate(String dateStr){
SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
Calendar cl = Calendar.getInstance();
try{
cl.setTime(sdf.parse(dateStr));
}catch(Exception e){
e.printStackTrace();
}
//设置每周的第一天为星期一
cl.setFirstDayOfWeek(Calendar.MONDAY);
intweek = cl.get(Calendar.WEEK_OF_YEAR);
cl.add(Calendar.DAY_OF_MONTH,-7);
intyear = cl.get(Calendar.YEAR);
if(week
year+=1;
}
// System.out.println("根据日期获取所属的周数:"+dateStr+":"+year+"年第"+week+"周");
return year+"-"+week;
}
/**
* 2017.11.16 yk
* 根据年份和周数,获取起止日期
* 规则:按中国习惯,周一到周日为一周。 跨年时,按照周末那天所在的年份,算到那年
* @paramyear
* @paramweek
* @return
*/
public static String getDateOfWeek(intyear,intweek) {
SimpleDateFormat format =newSimpleDateFormat("yyyy-MM-dd");
Calendar cl = Calendar.getInstance();
//设置年
cl.set(Calendar.YEAR,year);
//设置每周的第一天为星期一
cl.setFirstDayOfWeek(Calendar.MONDAY);
//设置周数
cl.set(Calendar.WEEK_OF_YEAR,week);
// 得到该周 周一的日期:
cl.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
String beginDate = format.format(cl.getTime());
// 得到该周 周日的日期:
cl.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
String endDate = format.format(cl.getTime());
// System.out.println("根据年份和周数,获取起止日期-------"+year+"年第"+week+"周的起止日期为:"+beginDate+" TO "+endDate);
returnbeginDate+"TO"+endDate;
}
/**
* 2017.11.16 yk
* 根据年份,获取总周数
* 规则:按中国习惯,周一到周日为一周。 跨年时,按照周末那天所在的年份,算到那年
* @paramyear
* @return
*/
public static int getWeeksOfYear(intyear){
Calendar cl = Calendar.getInstance();
//设置每周的第一天为星期一
cl.setFirstDayOfWeek(Calendar.MONDAY);
//设置月日为12月25日
cl.set(year,Calendar.DECEMBER,25);
intweek = cl.get(Calendar.WEEK_OF_YEAR);
// System.out.println("根据年份查询总周数-----------------:"+year+"年共有"+week+"周");
return week;
}