时间工具类



import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


public class DateUtil {

	private static final Logger LOGGER = Logger.getLogger(DateUtil.class);
	public static final long ONE_MINUTE = 60;
    public static final long ONE_HOUR = 3600;
    public static final long ONE_DAY = 86400;
    public static final long ONE_MONTH = 2592000;
    public static final long ONE_YEAR = 31104000;

    /**
	  * 日期转化格式:yyyy-MM-dd HH:mm:ss
	  */
	public static final String DATEFORMAT_PATTERN_ONE= "yyyy-MM-dd HH:mm:ss";
	 /**
	  * 日期转化格式:yyyy-MM-dd HH-mm-ss
	  */
	public static final String DATEFORMAT_PATTERN_TWO= "yyyy-MM-dd HH-mm-ss";
	 /**
	  * 日期转化格式:yyyy-MM-dd
	  */
	public static final String DATEFORMAT_PATTERN_THREE= "yyyy.MM.dd";

	 /**
	  * 日期转化格式:yyyy年MM月dd日
	  */
	public static final String DATEFORMAT_PATTERN_FOUR= "yyyy年MM月dd日";
	 /**
	  * 日期转化格式:20160201
	  */
	public static final String DATEFORMAT_PATTERN_FIVE = "yyyyMMdd";

	public static final String DATEFORMAT_PATTERN_SIX = "yyyyMMddHHmmss";

	public static final DateFormat DATE_NUMBER_FM = new SimpleDateFormat(DATEFORMAT_PATTERN_FIVE);

	public static final String DATEFORMAT_PATTERN_SIGN = "yyyy年MM月dd日 HH:mm:ss";
	public static final DateFormat DATE_SIGN_FM = new SimpleDateFormat(DATEFORMAT_PATTERN_SIGN);

	public static final DateFormat SDF_THREE = new SimpleDateFormat(DATEFORMAT_PATTERN_THREE);


    /**
     *
     * @return yyyy-mm-dd
     *  2012-12-25
     */
    public static String getDate() {
    	String day;
    	if(Integer.parseInt(getDay())<10){
    		day = "0"+getDay();
    	}else{
    		day = getDay();
    	}

    	String month;
    	if(Integer.parseInt(getMonth())< 10){
    		month = "0"+getMonth();
    	}else{
    		month = getMonth();
    	}
    	String data = getYear() + "-" + month + "-" + day;

        return data;
    }

    public static String getMM(){
    	return getMonth();
    }

    /**
     * @param format
     * @return
     * yyyy年MM月dd HH:mm
     * MM-dd HH:mm 2012-12-25
     *
     */
    public static String getDate(String format) {
        SimpleDateFormat simple = new SimpleDateFormat(format);
        return simple.format(Calendar.getInstance().getTime());
    }

    /**
     *
     * @return yyyy-MM-dd HH:mm
     * 2012-12-29 23:47
     */
    public static String getDateAndMinute() {
        SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        return simple.format(Calendar.getInstance().getTime());
    }

    /**
     *
     * @return
     *  yyyy-MM-dd HH:mm:ss
     *  2012-12-29 23:47:36
     */
    public static String getFullDate() {
        SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simple.format(Calendar.getInstance().getTime());
    }

    /**
     * 距离今天多久
     * @param date
     * @return
     *
     */
    public static String fromToday(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        long time = date.getTime() / 1000;
        long now = new Date().getTime() / 1000;
        long ago = now - time;
        if (ago <= ONE_HOUR)
            return ago / ONE_MINUTE + "分钟前";
        else if (ago <= ONE_DAY)
            return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE)
                    + "分钟前";
        else if (ago <= ONE_DAY * 2)
            return "昨天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
                    + calendar.get(Calendar.MINUTE) + "分";
        else if (ago <= ONE_DAY * 3)
            return "前天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
                    + calendar.get(Calendar.MINUTE) + "分";
        else if (ago <= ONE_MONTH) {
            long day = ago / ONE_DAY;
            return day + "天前" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
                    + calendar.get(Calendar.MINUTE) + "分";
        } else if (ago <= ONE_YEAR) {
            long month = ago / ONE_MONTH;
            long day = ago % ONE_MONTH / ONE_DAY;
            return month + "个月" + day + "天前"
                    + calendar.get(Calendar.HOUR_OF_DAY) + "点"
                    + calendar.get(Calendar.MINUTE) + "分";
        } else {
            long year = ago / ONE_YEAR;
            int month = calendar.get(Calendar.MONTH) + 1;// JANUARY which is 0 so month+1
            return year + "年前" + month + "月" + calendar.get(Calendar.DATE)
                    + "日";
        }

    }

    /**
     * 距离截止日期还有多长时间
     *
     * @param date
     * @return
     */
    public static String fromDeadline(Date date) {
        long deadline = date.getTime() / 1000;
        long now = (new Date().getTime()) / 1000;
        long remain = deadline - now;
        if (remain <= ONE_HOUR)
            return "只剩下" + remain / ONE_MINUTE + "分钟";
        else if (remain <= ONE_DAY)
            return "只剩下" + remain / ONE_HOUR + "小时"
                    + (remain % ONE_HOUR / ONE_MINUTE) + "分钟";
        else {
            long day = remain / ONE_DAY;
            long hour = remain % ONE_DAY / ONE_HOUR;
            long minute = remain % ONE_DAY % ONE_HOUR / ONE_MINUTE;
            return "只剩下" + day + "天" + hour + "小时" + minute + "分钟";
        }

    }

    /**
     * 距离今天的绝对时间
     *
     * @param date
     * @return
     */
    public static String toToday(Date date) {
        long time = date.getTime() / 1000;
        long now = (new Date().getTime()) / 1000;
        long ago = now - time;
        if (ago <= ONE_HOUR)
            return ago / ONE_MINUTE + "分钟";
        else if (ago <= ONE_DAY)
            return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE) + "分钟";
        else if (ago <= ONE_DAY * 2)
            return "昨天" + (ago - ONE_DAY) / ONE_HOUR + "点" + (ago - ONE_DAY)
                    % ONE_HOUR / ONE_MINUTE + "分";
        else if (ago <= ONE_DAY * 3) {
            long hour = ago - ONE_DAY * 2;
            return "前天" + hour / ONE_HOUR + "点" + hour % ONE_HOUR / ONE_MINUTE
                    + "分";
        } else if (ago <= ONE_MONTH) {
            long day = ago / ONE_DAY;
            long hour = ago % ONE_DAY / ONE_HOUR;
            long minute = ago % ONE_DAY % ONE_HOUR / ONE_MINUTE;
            return day + "天前" + hour + "点" + minute + "分";
        } else if (ago <= ONE_YEAR) {
            long month = ago / ONE_MONTH;
            long day = ago % ONE_MONTH / ONE_DAY;
            long hour = ago % ONE_MONTH % ONE_DAY / ONE_HOUR;
            long minute = ago % ONE_MONTH % ONE_DAY % ONE_HOUR / ONE_MINUTE;
            return month + "个月" + day + "天" + hour + "点" + minute + "分前";
        } else {
            long year = ago / ONE_YEAR;
            long month = ago % ONE_YEAR / ONE_MONTH;
            long day = ago % ONE_YEAR % ONE_MONTH / ONE_DAY;
            return year + "年前" + month + "月" + day + "天";
        }

    }

    public static String getYear() {
        return Calendar.getInstance().get(Calendar.YEAR) + "";
    }

    public static String getMonth() {
        int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
        return month + "";
    }

    public static String getDay() {
        return Calendar.getInstance().get(Calendar.DATE) + "";
    }

    public static String get24Hour() {
        return Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + "";
    }

    public static String getMinute() {
        return Calendar.getInstance().get(Calendar.MINUTE) + "";
    }

    public static String getSecond() {
        return Calendar.getInstance().get(Calendar.SECOND) + "";
    }


    public static void main(String[] args) throws ParseException {
//        String deadline = "2012-12-30 12:45:59";
//        Date date = new Date();
//        SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        date = simple.parse(deadline);
//        System.out.println(DateUtil.fromDeadline(date));
//
//        String before = "2012-12-12 0:0:59";
//        date = simple.parse(before);
//        System.out.println(DateUtil.fromToday(date));
//
//        System.out.println(DateUtil.getFullDate());
//        System.out.println(DateUtil.getDate());
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEE");
//
//        Date currentDate = new Date();
//
//        // 比如今天是2012-12-25
//        System.out.println("今天的日期: " + sdf.format(currentDate));
//
//        List<String> dayList = new ArrayList<String>();
//		System.out.println(dayList);
//
//        System.out.println((Integer.parseInt(DateUtil.getYear())+1)+"-"+DateUtil.getMonth()+"-"+
//				DateUtil.getDay()+" "+DateUtil.get24Hour()+":"+DateUtil.getMinute()
//				+":"+DateUtil.getSecond());
//        String osName = System.getProperty("os.name");
//
//        String user = System.getProperty("user.name");
//
//        System.out.println("当前操作系统是:" + osName);
//
//        System.out.println("当前用户是:" + user);
//        /*
//         *  System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
//         *  currentTimeMillis方法public static long currentTimeMillis()该方法的作用是返回当前的计算机时间,
//         *  时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
//         * */
//        long currentTime = System.currentTimeMillis();
//
//        System.out.println(currentTime);
//
//        SimpleDateFormat formatter = new SimpleDateFormat("yyyy年-MM月dd日-HH时mm分ss秒");
//
//        Date d = new Date(currentTime);
//
//        System.out.println(formatter.format(d));
//
//        System.out.println("********************");
//
//        System.out.println(getWeek("2016-01-03", -3, -2));
//
//        System.out.println(getWeek("2016-01-03", -2, -1));
//
//        System.out.println(getWeek("2016-01-03", -1, 0));
        Date d2 = new Date();
		d2.setDate(2);

		System.out.println(d2.getTime());



    }

	/**
	 * 获取当前日期是星期几<br>
	 *
	 * @param date
	 * @return 当前日期是星期几
	 */
	public static String getWeekOfDate(String date) {
		Date dt = null;
		try {
			dt = SDF_THREE.parse(date);
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
		String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
		Calendar cal = Calendar.getInstance();
		cal.setTime(dt);
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0)
			w = 0;
		return weekDays[w];
	}

    //获取周时间(根据参数获取上上周s=-3e=-2,上周s=-2e=-1,本周s=-1e=0)
    public static List<String> getWeek(String date,int s,int e) {
    	SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
        Date da = null;
		try {
			da = sdf.parse(date);
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
    	List<String> strList = new ArrayList<String>();
    	Calendar cal1 = Calendar.getInstance();
    	Calendar c = Calendar.getInstance();
    	c.setTime(da);
    	cal1.setTime(da);
    	int n = s;
    	cal1.add(Calendar.DATE, n*7);//想周几,这里就传几Calendar.MONDAY(TUESDAY...)
    	cal1.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
    	c.setFirstDayOfWeek(Calendar.MONDAY);
    	c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    	c.add(Calendar.WEEK_OF_MONTH, e);
    	String monday = new SimpleDateFormat("yyyy-MM-dd").format(cal1.getTime());
    	strList.add(monday);
    	String sunday = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
    	strList.add(sunday);
    	return strList;
    }


    public static String getTime(String user_time) {
    	String re_time = null;
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	Date d;
    	try {


    	d = sdf.parse(user_time);
    	long l = d.getTime();
    	String str = String.valueOf(l);
    	re_time = str.substring(0, 10);


    	} catch (ParseException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    	}
    	return re_time;
    	}



	public static String convertDate(String date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		 String str=null;
			try {
				Date datever=sdf.parse(date);
				int i = datever.compareTo(new Date());
				if (i == 1) {
					System.out.println("输入日期超过了当今日期");
					return null;
				} else if (i == -1) {
					datever.setTime(datever.getTime()-24*60*60*1000);
					str=sdf.format(datever);
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return str;
	}


	/**
	 * 返回今天的数值形式20150201
	 *
	 * @return
	 * @author 陈滔 2016年3月11日
	 */
	public static String getTodayStr() {

		return DATE_NUMBER_FM.format(new Date());
	}

	/**
	 * 根据传入的格式返回日期的字符形式
	 *
	 * @return
	 * @author 陈滔 2016年3月11日
	 */
	public static String getDateString(String dateFormat, Date date) {

		if (StringUtils.isBlank(dateFormat) || date == null) {
			return null;
		}

		DateFormat df = new SimpleDateFormat(dateFormat);
		return getDateString(df, date);
	}

	/**
	 * 根据传入的格式类返回日期的字符形式
	 *
	 * @param df
	 * @param date
	 * @return
	 * @author 陈滔 2016年3月14日
	 */
	public static String getDateString(DateFormat df, Date date) {

		if (df == null || date == null) {
			return null;
		}
		return df.format(date);
	}

	/**
	 * 计算到期天数(到期日期时间戳-系统日期时间戳)/天
	 * @author zhaoht
	 */
	public static int getDueDays(String expdate){
		String strDateFormat = expdate.length()> 10 ? "yyyy-MM-dd HH:mm:ss":"yyyy-MM-dd";
		DateFormat df = new SimpleDateFormat(strDateFormat);
		int days = 0;
		try {
			Date enddate = df.parse(expdate);
			BigDecimal time = BigDecimal.valueOf(enddate.getTime()).subtract((BigDecimal.valueOf(new Date().getTime())));
		    //远离0的四舍五入
			days = time.divide(BigDecimal.valueOf(1000*60*60*24),0,BigDecimal.ROUND_UP).intValue();
		} catch (ParseException e){
			LOGGER.error("剩余天数:日期格式转换异常!");
		}
		return days;
	}

	/**
	 * 字符串日期格式化: eg: yyyy-MM-dd HH:mm:ss -> yyyy年MM月dd日
	 * @author zhaoht
	 */
	public static String strDateFormat (String source_format,String target_format,String strdate) {
		DateFormat df = new SimpleDateFormat(source_format);
		Date date = null;
		try {
			date = df.parse(strdate);
		} catch (ParseException e) {
			LOGGER.error("日期格式转换异常!");
		}
		df = new SimpleDateFormat(target_format);
		return df.format(date);
	}

	public static Date getDate(String timeString, String dateFormat)
			throws ParseException {

		if (StringUtils.isEmpty(timeString) || StringUtils.isEmpty(dateFormat)) {
			LOGGER.error("传入时间:" + timeString + " 日期格式:" + dateFormat + " 为空");
			return null;
		}
		//LOGGER.debug("传入时间:" + timeString + " 日期格式:" + dateFormat);
		return getDate(timeString, new SimpleDateFormat(dateFormat));
	}

	public static Date getDate(String timeString, SimpleDateFormat dateFormat)
			throws ParseException {

		if (StringUtils.isEmpty(timeString) || dateFormat==null) {
			LOGGER.error("传入时间:" + timeString + " 日期格式:" + dateFormat + " 为空");
			return null;
		}
		return dateFormat.parse(timeString);
	}

	/**
	 * 检查传入时间是否超过了现在时间
	 * @param date
	 * @return
	 * @author 陈滔
	 * 2016年2月2日
	 */
	public static boolean isOverNow(Date date){
		if(date == null){
			return false;
		}
		return date.getTime() > System.currentTimeMillis();
	}

	/**
	 * 将符合日期格式的字符串转化成时间戳
	 * @param str: 2015-04-22 16:53:20
	 * @param formatePattern :yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static long dateStrToTimestamp(String str, String formatePattern) {
		long timeStamp = 0L;

		try {
			Date date = DateUtils.parseDate(str,new String[] { formatePattern });
			timeStamp = date.getTime();
		} catch (ParseException e) {
			LOGGER.error("日期字符串错误",e);
		}
		return timeStamp;

	}

	/**
	 * 判断指定的日期与现在的日期是否相差超过传入时间,如果超过则返回true,否则返回false
	 * @param oldDate
	 * @author chentao
	 * @return
	 */
	public static boolean isOverDay(Date oldDate,int days) {
		if(oldDate==null||days==0){
			return false;
		}
		long oldTimes = oldDate.getTime();
		long currentTimes = System.currentTimeMillis();
		long gapTimes = 1000l*60*60*24*days;
		return oldTimes + gapTimes < currentTimes? true : false;
	}

	public static Map<String,String> getFirstAndLastOfWeek(Date date) throws ParseException {
		Calendar cal = Calendar.getInstance();

		cal.setTime(date);

		int d = 0;
		if (cal.get(Calendar.DAY_OF_WEEK) == 1) {
			d = -6;
		} else {
			d = 2 - cal.get(Calendar.DAY_OF_WEEK);
		}
		cal.set(Calendar.AM_PM,Calendar.AM);
		cal.add(Calendar.DAY_OF_WEEK, d);
		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,1);
		// 所在周开始日期
		Map<String,String> timeMap = new HashMap<>();
 		timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
		cal.add(Calendar.DAY_OF_WEEK, 6);
		// 所在周结束日期
		cal.set(Calendar.AM_PM,Calendar.PM);
		cal.set(Calendar.HOUR_OF_DAY,23);
		cal.set(Calendar.MINUTE,59);
		cal.set(Calendar.SECOND,59);
 		timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
		return timeMap;
	}

	public static Map<String,String> getFirstAndLastOfDay(Date date) throws ParseException {
		Calendar cal = Calendar.getInstance();

		cal.setTime(date);

		cal.set(Calendar.AM_PM,Calendar.AM);
 		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,1);
		// 所在周开始日期
		Map<String,String> timeMap = new HashMap<>();
		timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
		// 所在周结束日期
		cal.set(Calendar.AM_PM,Calendar.PM);
		cal.set(Calendar.HOUR_OF_DAY,23);
		cal.set(Calendar.MINUTE,59);
		cal.set(Calendar.SECOND,59);
		timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
		return timeMap;
	}

	public static int daysBetween(Date smdate,Date bdate) throws ParseException
	{
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		smdate=sdf.parse(sdf.format(smdate));
		bdate=sdf.parse(sdf.format(bdate));
		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 Map<String, String> getPreviousDateDuration(Map<String, Object> params) throws ParseException {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		int betweenDays =daysBetween(sdf.parse(params.get("startTimeStamp").toString()),sdf.parse(params.get("endTimeStamp").toString()));
		int endMinus = 0;
		int startMinus = 0;
		if(betweenDays == 0){
			endMinus=1;
			startMinus=1;
		}else{
			endMinus=1;
			startMinus=betweenDays+1;
		}
		cal.setTime(sdf.parse(params.get("startTimeStamp").toString()));
		cal.set(Calendar.AM_PM,Calendar.PM);
		cal.set(Calendar.HOUR_OF_DAY,23);
		cal.set(Calendar.MINUTE,59);
		cal.set(Calendar.SECOND,59);
		cal.add(Calendar.DATE, -endMinus);
		// 所在周结束日期
		Map<String,String> timeMap = new HashMap<>();
		timeMap.put("endTimeStamp",String.valueOf(cal.getTimeInMillis()));
		// 所在周开始日期
		cal.add(Calendar.DATE, -startMinus+endMinus);
		cal.set(Calendar.AM_PM,Calendar.AM);
		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,1);
		timeMap.put("startTimeStamp",String.valueOf(cal.getTimeInMillis()));
		return timeMap;
	}

	/**
	 * 日前推算
	 * @param diff  今天日期 0  获取昨天-1  获取明天+1
	 * @param date  日期
	 * @return yyyy-MM-dd
	 */
	public static String getOtherDay(String date,int diff){
		Calendar ca = Calendar.getInstance();
		try{
			Date da = SDF_THREE.parse(date);
			ca.setTime(da);
			ca.add(Calendar.DATE, diff);
		}catch (Exception e){
			e.printStackTrace();
			return "解析错误";
		}
		return SDF_THREE.format(ca.getTime());
	}



	//获取当天的开始时间
	public static java.util.Date getDayBegin() {
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}
	//获取当天的结束时间
	public static java.util.Date getDayEnd() {
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}
	//获取昨天的开始时间
	public static Date getBeginDayOfYesterday() {
		Calendar cal = new GregorianCalendar();
		cal.setTime(getDayBegin());
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}
	//获取昨天的结束时间
	public static Date getEndDayOfYesterDay() {
		Calendar cal = new GregorianCalendar();
		cal.setTime(getDayEnd());
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}
	//获取明天的开始时间
	public static Date getBeginDayOfTomorrow() {
		Calendar cal = new GregorianCalendar();
		cal.setTime(getDayBegin());
		cal.add(Calendar.DAY_OF_MONTH, 1);

		return cal.getTime();
	}
	//获取明天的结束时间
	public static Date getEndDayOfTomorrow() {
		Calendar cal = new GregorianCalendar();
		cal.setTime(getDayEnd());
		cal.add(Calendar.DAY_OF_MONTH, 1);
		return cal.getTime();
	}
	//获取本周的开始时间
	@SuppressWarnings("unused")
	public static Date getBeginDayOfWeek(Date date) {
		if (date == null) {
			return null;
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
		if (dayofweek == 1) {
			dayofweek += 7;
		}
		cal.add(Calendar.DATE, 2 - dayofweek);
		return getDayStartTime(cal.getTime());
	}
	//获取本周的结束时间
	public static Date getEndDayOfWeek(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(getBeginDayOfWeek(date));
		cal.add(Calendar.DAY_OF_WEEK, 6);
		Date weekEndSta = cal.getTime();
		return getDayEndTime(weekEndSta);
	}
	//获取上周的开始时间
	@SuppressWarnings("unused")
	public static Date getBeginDayOfLastWeek(Date date) {
		if (date == null) {
			return null;
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
		if (dayofweek == 1) {
			dayofweek += 7;
		}
		cal.add(Calendar.DATE, 2 - dayofweek - 7);
		return getDayStartTime(cal.getTime());
	}
	//获取上周的结束时间
	public static Date getEndDayOfLastWeek(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(getBeginDayOfLastWeek(date));
		cal.add(Calendar.DAY_OF_WEEK, 6);
		Date weekEndSta = cal.getTime();
		return getDayEndTime(weekEndSta);
	}
	//获取本月的开始时间
	public static Date getBeginDayOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getNowYear(), getNowMonth(date) - 1, 1);
		return getDayStartTime(calendar.getTime());
	}
	//获取本月的结束时间
	public static Date getEndDayOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getNowYear(), getNowMonth(date) - 1, 1);
		int day = calendar.getActualMaximum(5);
		calendar.set(getNowYear(), getNowMonth(date) - 1, day);
		return getDayEndTime(calendar.getTime());
	}
	//获取上月的开始时间
	public static Date getBeginDayOfLastMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getNowYear(), getNowMonth(date) - 2, 1);
		return getDayStartTime(calendar.getTime());
	}
	//获取上月的结束时间
	public static Date getEndDayOfLastMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getNowYear(), getNowMonth(date) - 2, 1);
		int day = calendar.getActualMaximum(5);
		calendar.set(getNowYear(), getNowMonth(date) - 2, day);
		return getDayEndTime(calendar.getTime());
	}

	public static Date getBeginNearHalfAYear(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DATE,-182);
		return getDayStartTime(cal.getTime());
	}

	public static Date getEndNearHalfAYear(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return getDayEndTime(cal.getTime());
	}

	//获取本年的开始时间
	public static java.util.Date getBeginDayOfYear() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, getNowYear());
		// cal.set
		cal.set(Calendar.MONTH, Calendar.JANUARY);
		cal.set(Calendar.DATE, 1);

		return getDayStartTime(cal.getTime());
	}
	//获取本年的结束时间
	public static java.util.Date getEndDayOfYear() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, getNowYear());
		cal.set(Calendar.MONTH, Calendar.DECEMBER);
		cal.set(Calendar.DATE, 31);
		return getDayEndTime(cal.getTime());
	}
	//获取某个日期的开始时间
	public static Timestamp getDayStartTime(Date d) {
		Calendar calendar = Calendar.getInstance();
		if(null != d) calendar.setTime(d);
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return new Timestamp(calendar.getTimeInMillis());
	}
	//获取某个日期的结束时间
	public static Timestamp getDayEndTime(Date d) {
		Calendar calendar = Calendar.getInstance();
		if(null != d) calendar.setTime(d);
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
		calendar.set(Calendar.MILLISECOND, 999);
		return new Timestamp(calendar.getTimeInMillis());
	}
	//获取今年是哪一年
	public static Integer getNowYear() {
		Date date = new Date();
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(date);
		return Integer.valueOf(gc.get(1));
	}
	//获取本月是哪一月
	public static int getNowMonth(Date date) {
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(date);
		return gc.get(2) + 1;
	}
	//两个日期相减得到的天数
	public static int getDiffDays(Date beginDate, Date endDate) {

		if (beginDate == null || endDate == null) {
			throw new IllegalArgumentException("getDiffDays param is null!");
		}

		long diff = (endDate.getTime() - beginDate.getTime())
				/ (1000 * 60 * 60 * 24);

		int days = new Long(diff).intValue();

		return days;
	}
	//两个日期相减得到的毫秒数
	public static long dateDiff(Date beginDate, Date endDate) {
		long date1ms = beginDate.getTime();
		long date2ms = endDate.getTime();
		return date2ms - date1ms;
	}
	//获取两个日期中的最大日期
	public static Date max(Date beginDate, Date endDate) {
		if (beginDate == null) {
			return endDate;
		}
		if (endDate == null) {
			return beginDate;
		}
		if (beginDate.after(endDate)) {
			return beginDate;
		}
		return endDate;
	}
	//获取两个日期中的最小日期
	public static Date min(Date beginDate, Date endDate) {
		if (beginDate == null) {
			return endDate;
		}
		if (endDate == null) {
			return beginDate;
		}
		if (beginDate.after(endDate)) {
			return endDate;
		}
		return beginDate;
	}
	//返回某月该季度的第一个月
	public static Date getFirstSeasonDate(Date date) {
		final int[] SEASON = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int sean = SEASON[cal.get(Calendar.MONTH)];
		cal.set(Calendar.MONTH, sean * 3 - 3);
		return cal.getTime();
	}
	//返回某个日期下几天的日期
	public static Date getNextDay(Date date, int i) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);
		return cal.getTime();
	}
	//返回某个日期前几天的日期
	public static Date getFrontDay(Date date, int i) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);
		return cal.getTime();
	}
	//获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List getTimeList(int beginYear, int beginMonth, int endYear,
								   int endMonth, int k) {
		List list = new ArrayList();
		if (beginYear == endYear) {
			for (int j = beginMonth; j <= endMonth; j++) {
				list.add(getTimeList(beginYear, j, k));

			}
		} else {
			{
				for (int j = beginMonth; j < 12; j++) {
					list.add(getTimeList(beginYear, j, k));
				}

				for (int i = beginYear + 1; i < endYear; i++) {
					for (int j = 0; j < 12; j++) {
						list.add(getTimeList(i, j, k));
					}
				}
				for (int j = 0; j <= endMonth; j++) {
					list.add(getTimeList(endYear, j, k));
				}
			}
		}
		return list;
	}
	//获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static List getTimeList(int beginYear, int beginMonth, int k) {
		List list = new ArrayList();
		Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1);
		int max = begincal.getActualMaximum(Calendar.DATE);
		for (int i = 1; i < max; i = i + k) {
			list.add(begincal.getTime());
			begincal.add(Calendar.DATE, k);
		}
		begincal = new GregorianCalendar(beginYear, beginMonth, max);
		list.add(begincal.getTime());
		return list;
	}
	public static Date getCurrentWeekStartDate(){
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		Date date = cal.getTime();
		return date;
	}
	public static Date getCurrentMonthStartDate(){
		Calendar cal = Calendar.getInstance();//获取当前日期
		cal.add(Calendar.MONTH,-1);
		cal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,0);
		Date date = cal.getTime();
		return date;
	}
	public static Date getCurrentHalfYearStartDate(){
		Calendar cal=Calendar.getInstance();
		cal.add(Calendar.DAY_OF_YEAR,-163);
		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,0);
		Date date = cal.getTime();
		return  date;
	}
	public static Date getTodayStartDate(){
		Calendar cal=Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY,0);
		cal.set(Calendar.MINUTE,0);
		cal.set(Calendar.SECOND,0);
		Date date = cal.getTime();
		return  date;
	}
	public static Date getTodayDateByParam(int hourOfDay,int minute){
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		Date now=new Date();
		String nowString=simpleDateFormat.format(now);
		String dateArray[]=nowString.split("-");
		cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
		Date todayTime=cal.getTime();
		return  todayTime;
	}
	public static Date getSpecialDateByParam(Object dateString,int hourOfDay,int minute){
		Calendar cal = Calendar.getInstance();
		String dateArray[]=dateString.toString().split("-");
		cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
		Date specialTime=cal.getTime();
		return  specialTime;
	}
	public static Date getYesterdayDateByParam(int hourOfDay,int minute){
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		Date now=new Date();
		String nowString=simpleDateFormat.format(now);
		String dateArray[]=nowString.split("-");
		cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
		cal.add(Calendar.DAY_OF_MONTH,-1);
		Date todayTime=cal.getTime();
		return  todayTime;
	}
	public static Date getSpecailDateBeforeDateByParam(Object dateString,int hourOfDay,int minute){
		Calendar cal = Calendar.getInstance();
		String dateArray[]=dateString.toString().split("-");
		cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
		cal.add(Calendar.DAY_OF_MONTH,-1);
		Date specialTime=cal.getTime();
		return  specialTime;
	}
	public static Date getSpecailDateAfterDateByParam(Object dateString,int hourOfDay,int minute){
		Calendar cal = Calendar.getInstance();
		String dateArray[]=dateString.toString().split("-");
		cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1])-1, Integer.parseInt(dateArray[2]),hourOfDay,minute,00);
		cal.add(Calendar.DAY_OF_MONTH,1);
		Date specialTime=cal.getTime();
		return  specialTime;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值