获取一年的周历列表

public class CalendarUtil {

	
	/**
	 * 获取周历,周一为第一天
	 * 返回Map
	 * eg:
	 * 	wk_fisrt_day:2018-06-11
	 *  wk_fisrt_day_md:06.11
	 *  wk_end_day:2018-06-17
	 *  wk_fisrt_day_md:06.17
	 *    
	 * @param date
	 * @return
	 */
	public static Map<String,String> getWeekCh(Date date){
		
		Map<String,String> map = new HashMap<String,String>();
		
		int year = DateUtil.getYear(date);
		
		// 计算当前周的起止日期
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
		int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
		if (1 == dayWeek) {
			cal.add(Calendar.DAY_OF_MONTH, -1);
		}
		cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
		int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
		cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
		//System.out.println("所在周星期一的日期:" + cal.getTime());
		String wk_fisrt_day = DateUtil.getFormatString(cal.getTime(),"yyyyMMdd");
		if(Integer.valueOf(wk_fisrt_day) <= (year*10000+101)){// xxxx0101
			map.put("wk_fisrt_day", year+"-01-01");
			map.put("wk_fisrt_day_md", "01.01");
		}else{
			map.put("wk_fisrt_day", DateUtil.getFormatString(cal.getTime(),"yyyy-MM-dd"));
			map.put("wk_fisrt_day_md", DateUtil.getFormatString(cal.getTime(),"MM.dd"));
		}
		//System.out.println("str:" + wk_fisrt_day);
		//System.out.println(cal.getFirstDayOfWeek() + "-" + day + "+6="+ (cal.getFirstDayOfWeek() - day + 6));
		cal.add(Calendar.DATE, 6);
		//System.out.println("所在周星期日的日期:" + cal.getTime());
		String wk_end_day = DateUtil.getFormatString(cal.getTime(),"yyyyMMdd");		
		if(Integer.valueOf(wk_end_day) >= (year*10000+1231)){// xxxx1231
			map.put("wk_end_day", year+"-12-31");
			map.put("wk_end_day_md", "12.31");
		}else{
			map.put("wk_end_day", DateUtil.getFormatString(cal.getTime(),"yyyy-MM-dd"));
			map.put("wk_end_day_md", DateUtil.getFormatString(cal.getTime(),"MM.dd"));
		}
		//System.out.println("str:" + wk_end_day);

		return map;
	}
	
	/**
	 * 返回一年的周列表
	 * 
	 * @param year
	 * @return
	 */
	public static List<Map<String,String>> getWeekChList(Integer year){
		
		List<Map<String,String>> weeklist = new ArrayList<Map<String,String>>();	
				
		try {
			Date date0101 = DateUtil.getDate(year+"-01-01 00:00:00");			
			Map<String,String> week = getWeekCh(date0101);
			week.put("text", "第1周("+week.get("wk_fisrt_day_md")+"~"+week.get("wk_end_day_md")+")");
			String week_end = week.get("wk_end_day");
			weeklist.add(week);
			for (int i = 2; i < 54; i++) {
				if(Integer.valueOf(week_end.replaceAll("-", "")) >= (year*10000+1231)){
					break;
				}else{
					Date week_end_last = DateUtil.getDate(week_end+" 00:00:00");
					Map<String,String> week_new = getWeekCh(DateUtil.addDays(week_end_last, 1));
					week_end = week_new.get("wk_end_day");
					week_new.put("text", "第"+i+"周("+week_new.get("wk_fisrt_day_md")+"~"+week_new.get("wk_end_day_md")+")");
					weeklist.add(week_new);
				}	
			}
			
		} catch (ParseException e) {			
			e.printStackTrace();
		}
		return weeklist;
		
	}
}
public class DateUtil {

	public static Date addDays(Date date, int days) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.DATE, days);
		return c.getTime();
	}

	public static Date getDate(String dateString) throws ParseException {
		SimpleDateFormat new_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return new_sdf.parse(dateString);
	}

	public static Date getDate(Date date, String clock) throws ParseException {// clock
																				// 08:00
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String dateStr = sdf.format(date) + " " + clock;
		SimpleDateFormat new_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		return new_sdf.parse(dateStr);
	}

	public static Date getDateChg_mmss(Date date, String clock_mmss)
			throws ParseException {// clock 08:00
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String dateStr = sdf.format(date) + " " + getHour(date) + ":"
				+ clock_mmss;
		SimpleDateFormat new_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return new_sdf.parse(dateStr);
	}

	public static Date getDate235959(Date date) throws ParseException {// clock
																		// 08:00
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String dateStr = sdf.format(date) + " 23:59:59";
		SimpleDateFormat new_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return new_sdf.parse(dateStr);
	}

	public static Date getDateRemoveClock(Date date) throws ParseException {// "yyyy-MM-dd"
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String day = sdf.format(date);
		return sdf.parse(day);
	}

	/**
	 * 获取年
	 * 
	 * @param date
	 * @return
	 */
	public static int getYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.YEAR);
	}

	public static int getHour(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.HOUR_OF_DAY);
	}

	public static Date getYearBeginDate(Integer year) throws ParseException {
		return getDate(year + "-01-01 00:00:00");
	}

	public static Date getYearEndDate(Integer year) throws ParseException {
		return getDate(year + "-01-01 00:00:00");
	}

	public static Date getQuarterBeginDate(Integer year, Integer qindex)
			throws ParseException {
		String day = "01-01 00:00:00";
		if (qindex == 0) {
			day = "01-01 00:00:00";
		} else if (qindex == 1) {
			day = "04-01 00:00:00";
		} else if (qindex == 2) {
			day = "07-01 00:00:00";
		} else if (qindex == 3) {
			day = "10-01 00:00:00";
		}
		return DateUtil.getDate(year + "-" + day);
	}

	public static Date getHalfYearBeginDate(Integer year, Integer hindex)
			throws ParseException {
		if (hindex == 0) {
			return DateUtil.getDate(year + "-01-01 00:00:00");
		} else {
			return DateUtil.getDate(year + "-07-01 00:00:00");
		}
	}

	/**
	 * 获取季度 {0,1,2,3} 对应季度1,2,3,4
	 * 
	 * @param date
	 * @return
	 */
	public static int getQuarter(Date date) {
		return getMonth(date) / 3;
	}

	/**
	 * 获取半年度 {0,1} 对应上半年,下半年
	 * 
	 * @param date
	 * @return
	 */
	public static int getHalfYear(Date date) {
		return getMonth(date) / 6;
	}

	public static int getMonth(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.MONTH);
	}

	public static int getDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DATE);
	}

	public static int getDayOfWeek(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DAY_OF_WEEK);
	}

	public static int getDayOfMonth(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DAY_OF_MONTH);
	}

	public static int getDayOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DAY_OF_YEAR);
	}

	public static long getDayDiff(Date d1, Date d2) {
		if (d1 == null || d2 == null)
			return -1;
		long diff = d1.getTime() - d2.getTime();
		return diff / 1000 / 60 / 60 / 24;
	}

	public static String getFormatString(Date date, String format) {
		SimpleDateFormat df = new SimpleDateFormat(format);
		return df.format(date);
	}

	/**
	 * 获取两个日期相差的月数
	 * 
	 * @param d1
	 *            较大的日期
	 * @param d2
	 *            较小的日期
	 * @return 如果d1>d2返回 月数差 否则返回0
	 */
	public static int getMonthDiff(Date d1, Date d2) {
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		c1.setTime(d1);
		c2.setTime(d2);
		if (c1.getTimeInMillis() < c2.getTimeInMillis())
			return 0;
		int year1 = c1.get(Calendar.YEAR);
		int year2 = c2.get(Calendar.YEAR);
		int month1 = c1.get(Calendar.MONTH);
		int month2 = c2.get(Calendar.MONTH);
		int day1 = c1.get(Calendar.DAY_OF_MONTH);
		int day2 = c2.get(Calendar.DAY_OF_MONTH);
		// 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30
		int yearInterval = year1 - year2;
		// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
		if (month1 < month2 || month1 == month2 && day1 < day2)
			yearInterval--;
		// 获取月数差值
		int monthInterval = (month1 + 12) - month2;
		if (day1 < day2)
			monthInterval--;
		monthInterval %= 12;
		return yearInterval * 12 + monthInterval;
	}

	public static String getDate_yyyyMMdd(Date date, Integer days) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
		cal.add(Calendar.DAY_OF_MONTH, days);
		return sf.format(cal.getTime());
	}
	public static Date getDate(Date date, Integer days) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_MONTH, days);
		return cal.getTime();
	}

	public static void main(String[] args) throws ParseException {
		// System.out.println(getYear(new Date()));
		// System.out.println(getQuarter(new Date()));
		//
		// System.out.println(0/6);
		// System.out.println(1/6);
		// System.out.println(2/6);
		// System.out.println(3/6);
		// System.out.println(4/6);
		// System.out.println(5/6);
		// System.out.println(6/6);
		// System.out.println(7/6);
		// System.out.println(8/6);
		// System.out.println(9/6);
		// System.out.println(10/6);
		// System.out.println(11/6);
		 System.out.println(getDay(new Date()));
		//System.out.println(getDate("2017-07-16 00:00:00"));

	}
}

调用://获取所选年的周历数据
        //从全局变量中获取所选年份的周历数据,若有,不必重复计算
        List<Map<String,String>> week_list = (List<Map<String,String>>)request.getSession().getServletContext().getAttribute(year+"_wklist");
        if(week_list == null){
            week_list = CalendarUtil.getWeekChList(year);
            request.getSession().getServletContext().setAttribute(year+"_wklist", week_list);
        }

猜你喜欢

转载自blog.csdn.net/jovi_zhao/article/details/81777754
今日推荐