package com.zcloud.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 说明:日期处理
 * 作者:luoxiaobao
 * 官网:www.qdkjchina.com
 */
public class DateUtil {

	private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
	private final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
	private final static SimpleDateFormat sdfOnlyDay = new SimpleDateFormat("dd");
	private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
	private final static SimpleDateFormat sdfMDay = new SimpleDateFormat("yyyy-M-d");
	private final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
	private final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");

	/**
	 * 获取YYYY格式
	 * @return
	 */
	public static String getSdfTimes() {
		return sdfTimes.format(new Date());
	}

	/**
	 * 获取YYYY格式
	 * @return
	 */
	public static String getYear() {
		return sdfYear.format(new Date());
	}
	public static String getYear(Date date) {
		return sdfYear.format(date);
	}
	public static String getMonth() {
		return sdfMonth.format(new Date());
	}

	/**
	 * 获取DD格式
	 * @return
	 */
	public static String getOnlyDay() {
		return sdfOnlyDay.format(new Date());
	}

	/**
	 * 获取YYYY-MM-DD格式
	 * @return
	 */
	public static String getDay() {
		return sdfDay.format(new Date());
	}
	public static String MDay() {
		return sdfMDay.format(new Date());
	}

	/**
	 * 获取YYYYMMDD格式
	 * @return
	 */
	public static String getDays(){
		return sdfDays.format(new Date());
	}

	/**
	 * 获取YYYY-MM-DD HH:mm:ss格式
	 * @return
	 */
	public static String getTime() {
		return sdfTime.format(new Date());
	}

	/**
	 * @Title: compareDate
	 * @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
	 * @param s
	 * @param e
	 * @return boolean
	 * @throws
	 * @author fh
	 */
	public static boolean compareDate(String s, String e) {
		if(fomatDate(s)==null||fomatDate(e)==null){
			return false;
		}
		return fomatDate(s).getTime() >=fomatDate(e).getTime();
	}

	/**
	 * 格式化日期
	 * @return
	 */
	public static Date fomatDate(String date) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return fmt.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 格式化日期
	 * @return
	 */
	public static Date fomatDateTime(String date) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return fmt.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 校验日期是否合法
	 * @return
	 */
	public static boolean isValidDate(String s) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			fmt.parse(s);
			return true;
		} catch (Exception e) {
			return false; // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
		}
	}

	/**
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public static int getDiffYear(String startTime,String endTime) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			int years=(int) (((fmt.parse(endTime).getTime()-fmt.parse(startTime).getTime())/ (1000 * 60 * 60 * 24))/365);
			return years;
		} catch (Exception e) {
			return 0;	// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
		}
	}

	/**
	 * <li>功能描述:时间相减得到天数
	 * @param beginDateStr
	 * @param endDateStr
	 * @return
	 * long
	 * @author Administrator
	 */
	public static long getDaySub(String beginDateStr,String endDateStr){
		long day=0;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate = null;
		Date endDate = null;
		try {
			beginDate = format.parse(beginDateStr);
			endDate= format.parse(endDateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
		//System.out.println("相隔的天数="+day);
		return day;
	}

	/**
	 * 得到n天之后的日期
	 * @param days
	 * @return
	 */
	public static String getAfterDayDate(String days) {
		int daysInt = Integer.parseInt(days);
		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateStr = sdfd.format(date);
		return dateStr;
	}

	/**
	 * 当前时间加n小时之后的时间
	 * @param days
	 * @return
	 */
	public static String getAfterHourDate(String hours) {
		int hoursInt = Integer.parseInt(hours);
		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.HOUR, hoursInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateStr = sdfd.format(date);
		return dateStr;
	}

	/**
	 * 得到n天之后是周几
	 * @param days
	 * @return
	 */
	public static String getAfterDayWeek(String days) {
		int daysInt = Integer.parseInt(days);
		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdf = new SimpleDateFormat("E");
		String dateStr = sdf.format(date);
		return dateStr;
	}

	/**
	 * 按照yyyy-MM-dd HH:mm:ss的格式,日期转字符串
	 * @param date
	 * @return yyyy-MM-dd HH:mm:ss
	 */
	public static String date2Str(Date date){
		return date2Str(date,"yyyy-MM-dd HH:mm:ss");
	}
	public static String date3Str(Date date){
		return date2Str(date,"yyyy-M-d");
	}

	/**
	 * 按照yyyy-MM-dd HH:mm:ss的格式,字符串转日期
	 * @param date
	 * @return
	 */
	public static Date str2Date(String date){
		if(Tools.notEmpty(date)){
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			try {
				return sdf.parse(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return new Date();
		}else{
			return null;
		}
	}

	/**
	 * 把时间根据时、分、秒转换为时间段
	 * @param StrDate
	 */
	public static String getTimes(String StrDate){
		String resultTimes = "";
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date now;
		try {
			now = new Date();
			Date date=df.parse(StrDate);
			long times = now.getTime()-date.getTime();
			long day  =  times/(24*60*60*1000);
			long hour = (times/(60*60*1000)-day*24);
			long min  = ((times/(60*1000))-day*24*60-hour*60);
			long sec  = (times/1000-day*24*60*60-hour*60*60-min*60);

			StringBuffer sb = new StringBuffer();
			//sb.append("发表于:");
			if(hour>0 ){
				sb.append(hour+"小时前");
			} else if(min>0){
				sb.append(min+"分钟前");
			} else{
				sb.append(sec+"秒前");
			}
			resultTimes = sb.toString();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return resultTimes;
	}

	/**
	 * 按照参数format的格式,日期转字符串
	 * @param date
	 * @param format
	 * @return
	 */
	public static String date2Str(Date date,String format){
		if(date!=null){
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			return sdf.format(date);
		}else{
			return "";
		}
	}

	/**
	 * 获取当年的第一天
	 * @param year
	 * @author zhangyue
	 * @return
	 */
	public static String  getCurrYearFirst(){
		Calendar currCal=Calendar.getInstance();
		int currentYear = currCal.get(Calendar.YEAR);
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, currentYear);
		Date currYearFirst = calendar.getTime();
		return sdfDay.format(currYearFirst);
	}

	/**
	 * 获取当年的最后一天
	 * @param year
	 * @author zhangyue
	 * @return
	 */
	public static String getCurrYearLast(){
		Calendar currCal=Calendar.getInstance();
		int currentYear = currCal.get(Calendar.YEAR);
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, currentYear);
		calendar.roll(Calendar.DAY_OF_YEAR, -1);
		Date currYearLast = calendar.getTime();
		return sdfDay.format(currYearLast);
	}



	/**
	 * 获取当前季度第一天
	 * @author zhangyue
	 * @return
	 */
	public static String quarterStart() {
		Date dBegin = new Date();
		Calendar calBegin = Calendar.getInstance();
		calBegin.setTime(dBegin);
		int remainder = calBegin.get(Calendar.MONTH)  % 3;
		int month = remainder != 0 ? calBegin.get(Calendar.MONTH) - remainder: calBegin.get(Calendar.MONTH);

		calBegin.set(Calendar.MONTH, month);
		calBegin.set(Calendar.DAY_OF_MONTH, calBegin.getActualMinimum(Calendar.DAY_OF_MONTH));

		calBegin.setTime(calBegin.getTime());
		return sdfDay.format(calBegin.getTime());
	}

	/**
	 * 获取当前季度最后一天
	 * @author zhangyue
	 * @return
	 */
	public static String quarterEnd() {
		Date dEnd = new Date();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dEnd);
		int remainder = (calendar.get(Calendar.MONTH) + 1) % 3;
		int month = remainder != 0 ? calendar.get(Calendar.MONTH) + (3 - remainder) : calendar.get(Calendar.MONTH);
		calendar.set(Calendar.MONTH, month);
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		calendar.setTime(calendar.getTime());
		return sdfDay.format(calendar.getTime());
	}

	/**
	 * 获取本月第一天日期
	 * @return
	 */
	public static String getMonthFirstDay() {
		Calendar thisMonthFirstDateCal = Calendar.getInstance();
		thisMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1);
		String thisMonthFirstTime = sdfDay.format(thisMonthFirstDateCal.getTime());
		return thisMonthFirstTime;
	}

	/**
	 * 获取本月最后一天日期
	 * @return
	 */
	public static String getMonthEndDay() {
		Calendar thisMonthEndDateCal = Calendar.getInstance();
		thisMonthEndDateCal.set(Calendar.DAY_OF_MONTH, thisMonthEndDateCal.getActualMaximum(Calendar.DAY_OF_MONTH));
		String thisMonthEndTime = sdfDay.format(thisMonthEndDateCal.getTime());
		return thisMonthEndTime;
	}
	public static boolean timeCalendar(Date nowTime, Date amBeginTime, Date amEndTime) {
		//设置当前时间
		Calendar date = Calendar.getInstance();
		date.setTime(nowTime);
		//设置开始时间
		Calendar amBegin = Calendar.getInstance();
		amBegin.setTime(amBeginTime);//上午开始时间
		//设置结束时间
		Calendar amEnd = Calendar.getInstance();
		amEnd.setTime(amEndTime);//上午结束时间
		//处于开始时间之后,和结束时间之前的判断
		if ((date.after(amBegin) && date.before(amEnd))) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获取本周的第一天
	 * @return String
	 * **/
	public static String getWeekStart(){

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
		Calendar cal = Calendar.getInstance();
		// Calendar c = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, 0);
		// cal.setTime(time);

		// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
		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);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
		/*
		 * cal.add(Calendar.DATE, 6);
		 * System.out.println("所在周星期日的日期:"+sdf.format(cal.getTime()));
		 */

		return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 00:00:00";
	}
	/**
	 * 获取本周的最后一天
	 * @return String
	 * **/
	public static String getWeekEnd(){

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
		Calendar cal = Calendar.getInstance();
		// Calendar c = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_MONTH, 0);
		// cal.setTime(time);

		// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
		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);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值

		cal.add(Calendar.DATE, 6);

		return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 23:59:59";
	}



	/**
	 * 判断时间格式 格式必须为“YYYY-MM-dd”
	 * 2004-2-30 是无效的
	 * 2003-2-29 是无效的
	 * @param sDate
	 * @return
	 */
	public static boolean isLegalDate(String sDate) {
		int legalLen = 10;
		if ((sDate == null) || (sDate.length() != legalLen)) {
			return false;
		}

		DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date = formatter.parse(sDate);
			return sDate.equals(formatter.format(date));
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 时间比较
	 * @param amBeginTime
	 * @param amEndTime
	 * @return
	 */
	public static boolean timeCompare(Date amBeginTime, Date amEndTime) {
		//设置开始时间
		Calendar amBegin = Calendar.getInstance();
		amBegin.setTime(amBeginTime);//上午开始时间
		//设置结束时间
		Calendar amEnd = Calendar.getInstance();
		amEnd.setTime(amEndTime);//上午结束时间
		//开始时间是否早于结束时间
		if (amBegin.before(amEnd)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获取6个月内月份日期
	 * @param flag     结果是否显示年份
	 * @return
	 */
	public static List<String> getHalfYearMonth(boolean flag) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -4);
		String before_six = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH);// 六个月前
		List<String> result = new ArrayList<String>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");// 格式化为年月
		Calendar min = Calendar.getInstance();
		Calendar max = Calendar.getInstance();
		try {
			min.setTime(sdf.parse(before_six));
			min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
			max.setTime(sdf.parse(sdf.format(new Date())));

			//不含当前月

	/*		int month = max.get(Calendar.MONTH);
			max.set(Calendar.MONTH, month-1);
		*/
		} catch (ParseException e) {
			e.printStackTrace();
		}
		max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
		Calendar curr = min;
		while (curr.before(max)) {
			if (flag) {
				result.add(sdf.format(curr.getTime()));
			} else {
				result.add(curr.get(Calendar.MONTH) + 1 + "月");
			}
			curr.add(Calendar.MONTH, 1);
		}
		return result;
	}


	//根据当前日期获得最近n周的日期区间(不包含本周)
	public static String getFromToDate(SimpleDateFormat sdf, Date date, int n, int option, int k) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek;
		int amount = 0 == option ? offset - (n - 1  + k) * 7 : offset - k * 7;
		calendar.add(Calendar.DATE, amount);
		return sdf.format(calendar.getTime());
	}
	public static SimpleDateFormat sdf() {
		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	}
	// 获取上周的开始时间
	public static String getBeginDayOfLastWeek() {
		//上周日期
		SimpleDateFormat sdf = sdf();
		String beginDate = getFromToDate(sdf, new Date(), 1, 0, 1);

		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(sdf.parse(beginDate));
		}catch (Exception e){
			e.printStackTrace();
		}
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return sdf.format(calendar.getTime());
	}

	// 获取上周的结束时间
	public static String getEndDayOfLastWeek() {
		//上周日期
		SimpleDateFormat sdf = sdf();
		String endDate = getFromToDate(sdf, new Date(), 1, 1, 1);

		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(sdf.parse(endDate));
		}catch (Exception e){
			e.printStackTrace();
		}
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		return sdf.format(calendar.getTime());
	}

	// 获得上月第一天0点时间
	public static String getTimesLastMonthmorning() {
		//上月日期
		Calendar c=Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		SimpleDateFormat sdf = sdf();
		String gtimelast = sdf.format(c.getTime()); //上月
		int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

		//按格式输出
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01 00:00:00");
		String gtime = sdf2.format(c.getTime()); //上月第一天
		return gtime;
	}
	// 获得上月最后一天24点时间
	public static String getTimesLastMonthnight() {
		//上月日期
		Calendar c=Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		SimpleDateFormat sdf = sdf();
		String gtimelast = sdf.format(c.getTime()); //上月
		int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

		//按格式输出
		String gtime = sdf.format(c.getTime()); //上月最后一天
		return gtime;
	}
	/**
	 * 获取上一季度 开始和结束时间
	 *
	 * @return
	 */
	public static String[] getLastQuarter() {
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
		String[] range = new String[2];
		Calendar startCalendar = Calendar.getInstance();
		startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
		startCalendar.set(Calendar.DAY_OF_MONTH, 1);
		Date startDate = startCalendar.getTime();
		range[0] = sdfd.format(startDate);

		Calendar endCalendar = Calendar.getInstance();
		endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
		endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		Date endDate = endCalendar.getTime();
		range[1] = sdfd.format(endDate);
		return range;
	}

	/**
	 * 获取当日期前/后某个月的所有日期 0 本月 负数 之前的月份 。正数 之后的月份
	 *
	 * @param months
	 * @return
	 */
	public static List<String> getDayListOfMonth(Integer months) {
		List<String> list = new ArrayList<>();
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + months);
		int month = cal.get(Calendar.MONTH) + 1;
		String monthStr = month < 10 ? "0" + month : String.valueOf(month);
		int year = cal.get(Calendar.YEAR);
		int day = cal.getActualMaximum(Calendar.DATE);
		for (int i = 1; i <= day; i++) {
			String d = String.valueOf(i);
			if (i < 10) {
				d = "0" + d;
			}
			list.add(year + "-" + monthStr + "-" + d);
		}
		return list;
	}

	/**
	 * 计算两个日期之间相差的天数
	 *
	 * @param smdate 较小的时间
	 * @param bdate  较大的时间
	 * @return 相差天数
	 * @throws ParseException
	 */
	public static int daysBetween(Date smdate, Date bdate) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		try {
			smdate = sdf.parse(sdf.format(smdate));
			bdate = sdf.parse(sdf.format(bdate));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(smdate);
		long time1 = cal.getTimeInMillis();
		cal.setTime(bdate);
		long time2 = cal.getTimeInMillis();
		long between_days = (time2 - time1) / (1000 * 3600 * 24);

		return Integer.parseInt(String.valueOf(between_days));
	}

	/**
	 * 字符串的日期格式的计算
	 */
	public static int daysBetween(String smdate, String bdate) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		long time1 = 0;
		long time2 = 0;
		try {
			cal.setTime(sdf.parse(smdate));
			time1 = cal.getTimeInMillis();
			cal.setTime(sdf.parse(bdate));
			time2 = cal.getTimeInMillis();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		long between_days = (time2 - time1) / (1000 * 3600 * 24);

		return Integer.parseInt(String.valueOf(between_days));
	}

	/**
	 * 得到几天前的时间
	 *
	 * @param d
	 * @param day
	 * @return
	 */
	public static Date getDateBefore(Date d, int day) {
		Calendar now = Calendar.getInstance();
		now.setTime(d);
		now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
		return now.getTime();
	}

	/**
	 * 得到几天后的时间
	 *
	 * @param d
	 * @param day
	 * @return
	 */
	public static Date getDateAfter(Date d, int day) {
		Calendar now = Calendar.getInstance();
		now.setTime(d);
		now.set(Calendar.DATE, now.get(Calendar.DATE) + day -1);
		return now.getTime();
	}


	/**
	 * 格式化日期
	 * @return
	 */
	public static Date fomatDateByNian(String date) {
		DateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
		try {
			return fmt.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	public static void main(String[] args) {
		String afterHourDate = DateUtil.getAfterHourDate("12");
		System.out.println(afterHourDate);

	}

	/**
	 * 时间换算(秒级)
	 */
	public static String calculateDateSecond(String dateStr, int second) {
		Date date = str2Date(dateStr);
		if (date != null) {
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.SECOND, second);
			SimpleDateFormat sdf = sdf();
			return sdf.format(calendar.getTime());
		}
		return "";
	}
}