DateUtil日期转换工具类

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

	/**
	 * 将日期格式化为字符串
	 *
	 * @param date
	 * @param pattern	"yyyy/MM/dd HH:mm:ss"
	 * @return String
	 */
	public static String formatDateToStr(Date date, String pattern) {
		if (date == null || StringUtils.isEmpty(pattern)) {
			return "";
		}
		DateFormat df = new SimpleDateFormat(pattern);
		String dateStr = df.format(date);
		return dateStr;
	}

	/**
	 * 将字符串转换为日期
	 *
	 * @param str
	 * @param pattern	"yyyy/MM/dd HH:mm:ss"
	 * @return Date
	 * @throws ParseException
	 */
	public static Date formatStrToDate(String str, String pattern) throws ParseException {
		DateFormat df = new SimpleDateFormat(pattern);
		return df.parse(str);
	}

    /**
     * 获取指定年的的第一天 00:00:00
     * @return
     */
    public static Date getStartDayOfYear(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(date);
        calendar.set(calendar.get(Calendar.YEAR),0,1);

        calendar.set(Calendar.HOUR,0);//时
        calendar.set(Calendar.MINUTE,0);//分
        calendar.set(Calendar.SECOND,0);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定年的的最后一天 23:59:59
     * @param date
     * @return Date
     */
    public static Date getLastDayOfYear(Date date) {
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        final int last = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
        calendar.set(Calendar.DAY_OF_YEAR, last);

        calendar.set(Calendar.HOUR,23);//时
        calendar.set(Calendar.MINUTE,59);//分
        calendar.set(Calendar.SECOND,59);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定月的第一天 00:00:00
     * @return
     */
    public static Date getStartDayOfMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(date);
        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),1);

        calendar.set(Calendar.HOUR,0);//时
        calendar.set(Calendar.MINUTE,0);//分
        calendar.set(Calendar.SECOND,0);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定月的最后一天 23:59:59
     * @param date
     * @return
     */
    public static Date getLastDayOfMonth(Date date) {
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        final int last = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, last);

        calendar.set(Calendar.HOUR,23);//时
        calendar.set(Calendar.MINUTE,59);//分
        calendar.set(Calendar.SECOND,59);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定周的第一天 00:00:00
     * @return
     */
    public static Date getStartDayOfWeek(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(date);
        calendar.setFirstDayOfWeek(Calendar.MONDAY); //以周一为首日
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        calendar.set(Calendar.HOUR,0);//时
        calendar.set(Calendar.MINUTE,0);//分
        calendar.set(Calendar.SECOND,0);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定周的最后一天 23:59:59
     * @param date
     * @return
     */
    public static Date getLastDayOfWeek(Date date) {
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.setFirstDayOfWeek(Calendar.MONDAY); //以周一为首日
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

        calendar.set(Calendar.HOUR,23);//时
        calendar.set(Calendar.MINUTE,59);//分
        calendar.set(Calendar.SECOND,59);//秒
        return calendar.getTime();
    }

    /**
     * 获取指定周的第一天 00:00:00
     * 如果:-1 0 0 0即 入参时间-1天的00:00:00
     * @return
     */
    public static Date getStartDayOfNUmber(Date date,int day, int hour, int min, int second){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(date);

        calendar.add(Calendar.DATE,day);

        calendar.set(Calendar.HOUR,hour);//时
        calendar.set(Calendar.MINUTE,min);//分
        calendar.set(Calendar.SECOND,second);//秒
        return calendar.getTime();
    }

    /**
     * 取得季度第一天
     *
     * @param date
     * @return
     */
    public static Date getFirstDateOfSeason(Date date) {
        return getStartDayOfMonth(getSeasonDate(date)[0]);
    }

    /**
     * 取得季度最后一天
     *
     * @param date
     * @return
     */
    public static Date getLastDateOfSeason(Date date) {
        return getLastDayOfMonth(getSeasonDate(date)[2]);
    }

    /**
     * 取得季度月
     *
     * @param date
     * @return
     */
    public static Date[] getSeasonDate(Date date) {
        Date[] season = new Date[3];

        Calendar c = Calendar.getInstance();
        c.setTime(date);

        int nSeason = getSeason(date);
        if (nSeason == 1) {// 第一季度
            c.set(Calendar.MONTH, Calendar.JANUARY);
            season[0] = c.getTime();
            c.set(Calendar.MONTH, Calendar.FEBRUARY);
            season[1] = c.getTime();
            c.set(Calendar.MONTH, Calendar.MARCH);
            season[2] = c.getTime();
        } else if (nSeason == 2) {// 第二季度
            c.set(Calendar.MONTH, Calendar.APRIL);
            season[0] = c.getTime();
            c.set(Calendar.MONTH, Calendar.MAY);
            season[1] = c.getTime();
            c.set(Calendar.MONTH, Calendar.JUNE);
            season[2] = c.getTime();
        } else if (nSeason == 3) {// 第三季度
            c.set(Calendar.MONTH, Calendar.JULY);
            season[0] = c.getTime();
            c.set(Calendar.MONTH, Calendar.AUGUST);
            season[1] = c.getTime();
            c.set(Calendar.MONTH, Calendar.SEPTEMBER);
            season[2] = c.getTime();
        } else if (nSeason == 4) {// 第四季度
            c.set(Calendar.MONTH, Calendar.OCTOBER);
            season[0] = c.getTime();
            c.set(Calendar.MONTH, Calendar.NOVEMBER);
            season[1] = c.getTime();
            c.set(Calendar.MONTH, Calendar.DECEMBER);
            season[2] = c.getTime();
        }
        return season;
    }

    /**
     *
     * 1 第一季度 2 第二季度 3 第三季度 4 第四季度
     *
     * @param date
     * @return
     */
    public static int getSeason(Date date) {

        int season = 0;

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int month = c.get(Calendar.MONTH);
        switch (month) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                season = 1;
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
                season = 2;
                break;
            case Calendar.JULY:
            case Calendar.AUGUST:
            case Calendar.SEPTEMBER:
                season = 3;
                break;
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                season = 4;
                break;
            default:
                break;
        }
        return season;
    }

}