日期工具类(重点)

日期工具类(常用)

package com.bcht.bigdata.dsjmh.api.utils;

import org.apache.commons.lang3.StringUtils;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * Created by wzp on 2017/6/27.
 */
public class DateUtils {
    public static String dateFormat = "yyyy-MM-dd";
    public static String timeFormat = "yyyy-MM-dd HH:mm:ss";
    public static String timeFormat2 = "yyyyMMddHHmmss";

    public static final SimpleDateFormat TIME_FORMAT =
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static final SimpleDateFormat DATE_FORMAT =
            new SimpleDateFormat("yyyy-MM-dd");
    public static final SimpleDateFormat DATEKEY_FORMAT =
            new SimpleDateFormat("yyyyMMdd");

    /**
     * 时间转字符
     *
     * @param date 时间 yyyy-MM-dd
     * @return
     */
    public static String toDateStr(Date date) {
        return toStr(date, dateFormat);
    }

    /**
     * 时间转字符
     *
     * @param date 时间 yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static String toTimeStr(Date date) {
        return toStr(date, timeFormat);
    }

    public static String toTimeStr2(Date date) {
        return toStr(date, timeFormat2);
    }

    /**
     * 时间转字符
     *
     * @param date   时间
     * @param format 时间格式
     * @return
     */
    public static String toStr(Date date, String format) {
        if (date != null) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(date);
        }
        return "";
    }

    /**
     * 字符转时间
     *
     * @param dateStr yyyy-MM-dd
     * @return
     */
    public static Date toDate(String dateStr) {
        return toDate(dateStr, dateFormat);
    }

    /**
     * 字符转时间
     *
     * @param dateStr yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static Date toTime(String dateStr) {
        return toDate(dateStr, timeFormat);
    }

    /**
     * 字符转时间
     *
     * @param dateStr
     * @param format
     * @return
     */
    public static Date toDate(String dateStr, String format) {
        if (StringUtils.isNotEmpty(dateStr)) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            try {
                return sdf.parse(dateStr);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 获取用户当前登录时间
     */
    public static Timestamp getlocaltime() {
        Timestamp time = new Timestamp(System.currentTimeMillis());
        return time;
    }

    /**
     * 转换为时间戳
     *
     * @param date
     * @return
     */
    public static Timestamp toTimestamp(Date date) {
        Timestamp time = new Timestamp(date.getTime());
        return time;
    }

    /**
     * 获取当前时间
     * 字符串格式
     * yyyy-MM-dd HH:mm:ss
     *
     * @return
     */
    public static String DateToString() {
        return toStr(new Date(), timeFormat);
    }

    /**
     * 获取指定时间的当天开始时间
     *
     * @param date 指定时间
     * @return 当天的开始时间
     */
    public static Date getBeginOfDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        long millisecond = hour * 60 * 60 * 1000 + minute * 60 * 1000 + second * 1000;
        cal.setTimeInMillis(cal.getTimeInMillis() - millisecond);
        return cal.getTime();
    }

    /**
     * 当前日期+/-days后的日期
     *
     * @param days
     * @return
     */
    public static Date getDateByDays(int days) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, days);
        return cal.getTime();
    }

    /**
     * 获取本周的结束时间
     */
    public static Date getEndDayOfWeek() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getBeginDayOfWeek());
        cal.add(Calendar.DAY_OF_WEEK, 6);
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }

    /**
     * 获取本周的开始时间
     */
    public static Date getBeginDayOfWeek() {
        Date date = new Date();
        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);
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }


    /**
     * 判断日期大小
     *
     * @param DATE1
     * @param DATE2
     * @return
     */
    public static int compare_date(String DATE1, String DATE2) {


        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date dt1 = df.parse(DATE1);
            Date dt2 = df.parse(DATE2);
            if (dt1.getTime() > dt2.getTime()) {
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }


    /**
     * 时间段内的天数
     *
     * @param cntDateBeg 开始时间
     * @param cntDateEnd 结束时间
     * @return
     */
    public static Integer getDays(String cntDateBeg, String cntDateEnd) {
        Integer day = 0;
        //拆分成数组
        String[] dateBegs = cntDateBeg.split("-");
        String[] dateEnds = cntDateEnd.split("-");
        //开始时间转换成时间戳
        Calendar start = Calendar.getInstance();
        start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
        Long startTIme = start.getTimeInMillis();
        //结束时间转换成时间戳
        Calendar end = Calendar.getInstance();
        end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
        Long endTime = end.getTimeInMillis();
        //定义一个一天的时间戳时长
        Long oneDay = 1000 * 60 * 60 * 24l;
        Long time = startTIme;
        //循环得出
        while (time <= endTime) {
            day++;
            time += oneDay;
        }
        return day;
    }

    /**
     * 时间段内的周数
     *
     * @param startDate
     * @param endDate
     * @return
     */
    public static Integer getWeeks(String startDate, String endDate) {
        if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
            Date start = toDate(startDate);
            Date end = toDate(endDate);
            Calendar cal = Calendar.getInstance();
            cal.setTime(start);
            long time1 = cal.getTimeInMillis();
            cal.setTime(end);
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1) / (1000 * 3600 * 24);
            Double days = Double.parseDouble(String.valueOf(between_days));
            if ((days / 7) > 0 && (days / 7) <= 1) {
                //不满一周的按一周算
                return 1;
            } else if (days / 7 > 1) {
                int day = days.intValue();
                if (day % 7 > 0) {
                    return day / 7 + 1;
                } else {
                    return day / 7;
                }
            } else if ((days / 7) == 0) {
                return 0;
            } else {
                //负数返还null
                return null;
            }
        }
        return null;
    }


    public static String getWeekBegin(String date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
        Calendar cal = Calendar.getInstance();
        Date time = sdf.parse(date);
        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);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        String getWeekBegin = sdf.format(cal.getTime());
        return getWeekBegin;

    }

    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin  dateEnd
     * @author liuliang
     * 根据参数获取获取前n天对应的时间段
     */
    public static Map getNumDay(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addDays(dateBegin, num));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addDays(dateEnd, num));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * @param Time yyyy-MM-dd HH:mm
     * @param num
     * @return
     */
    public static String getNumMinute(String Time, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String dateMinute ="";
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(Time);
             dateMinute = sdf.format(org.apache.commons.lang3.time.DateUtils.addMinutes(dateBegin, num));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateMinute;
    }



    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin  dateEnd
     * @author liuliang
     * 根据参数获取获取前n天对应的时间段
     */
    public static Map getNumDayTwo(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addDays(dateBegin, num));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addDays(dateEnd, num));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }


    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin  dateEnd
     * @author liuliang
     * 根据参数获取获取前n周同一天对应的时间段
     */
    public static Map getNumWeekDay(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addWeeks(dateBegin, num));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addWeeks(dateEnd, num));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin    dateEnd
     * @author liuliang
     * 根据参数获取获取前n月同一天对应的时间段
     */
    public static Map getNumMonthDay(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addMonths(dateBegin, num));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addMonths(dateEnd, num));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * 获取某个时间段内所有月份
     * @param startDate
     * @param endDate
     * @return
     * @throws ParseException
     */
    public static List<String> getMonthBetween(String startDate, String endDate) {
        ArrayList<String> result = new ArrayList<String>();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

            Calendar min = Calendar.getInstance();
            Calendar max = Calendar.getInstance();
            min.setTime(sdf.parse(startDate));
            min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

            max.setTime(sdf.parse(endDate));
            max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

            Calendar curr = min;
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.MONTH, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 获取上个月
     * */
    public static String getLastMonth(Date date, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);//格式化为年月
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH,-1);

        return sdf.format(calendar.getTime());
    }


    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin    dateEnd
     * @author liuliang
     * 根据参数获取获取前n年同一天对应的时间段
     */
    public static Map getNumYearhDay(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addYears(dateBegin, num));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addYears(dateEnd, num));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * @param startTime yyyy-MM-dd hh:mm:ss
     * @param endTime   yyyy-MM-dd hh:mm:ss
     * @param num
     * @return dateBegin    dateEnd
     * @author liuliang
     * 根据参数获取获取前n季度同一天对应的时间段
     */
    public static Map getNumJdDay(String startTime, String endTime, int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map map = new HashMap();
        try {
            Date dateBegin = sdf.parse(startTime);
            Date dateEnd = sdf.parse(endTime);
            String dateBegin1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addMonths(dateBegin, num * 3));
            String dateend1 = sdf.format(org.apache.commons.lang3.time.DateUtils.addMonths(dateEnd, num * 3));
            map.put("dateBegin", dateBegin1);
            map.put("dateEnd", dateend1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * @author wuyanfei
     * @date 2019-09-23
     * 获取一年前的同一天
     */
    public static String getOneYearAgo(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.YEAR, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    public static String getOneYearAgo(String time, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.YEAR, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    /**
     * @author wuyanfei
     * @date 2019-09-23
     * 获取一个季度前的同一天
     */
    public static String getOneQuarterAgo(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.MONTH, -3);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    /**
     * @author wuyanfei
     * @date 2019-09-23
     * 获取一个月前的同一天
     */
    public static String getOneMonthAgo(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.MONTH, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    public static String getOneMonthAgo(String time,String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.MONTH, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    /**
     * @author wuyanfei
     * @date 2019-09-23
     * 获取一周前的同一天
     */
    public static String getOneWeekAgo(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.WEEK_OF_YEAR, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    /**
     * @author wuyanfei
     * @date 2019-09-23
     * 获取前一天
     */
    public static String getOneDayAgo(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Calendar calendar = Calendar.getInstance();
        Date date = null;
        try {
            date = sdf.parse(time);
            calendar.setTime(date);
            calendar.add(Calendar.DAY_OF_MONTH, -1);
            Date after = calendar.getTime();
            return sdf.format(after);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }


    /**
     * @author wuyanfei
     * @date 2019-09-23
     * <p>
     * 获取不同时间粒度下的起始时间
     */
    public static String getStartTimeOfDay(String yearMonthDay) {
        return yearMonthDay + " 00:00:00";
    }

    public static String getEndTimeOfDay(String yearMonthDay) {
        return yearMonthDay + " 23:59:59";
    }

    public static String getStartTimeOfWeek(String yearWeek) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearWeek.split("-");
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        cal.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(params[1]));
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return sdf.format(cal.getTime()) + " 00:00:00";
    }

    public static String getEndTimeOfWeek(String yearWeek) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearWeek.split("-");
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        cal.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(params[1]) + 1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        return sdf.format(cal.getTime()) + " 23:59:59";
    }

    /**
     * @Param 2020-01
     * @return一个月开始的时间
     **/

    public static String getStartTimeOfMonth(String yearMonth) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearMonth.split("-");
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(params[1]) - 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return sdf.format(cal.getTime()) + " 00:00:00";
    }

    public static String getEndTimeOfMonth(String yearMonth) {
        SimpleDateFormat ss = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearMonth.split("-");
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(params[1]) - 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.roll(Calendar.DATE, -1);
        return ss.format(cal.getTime()) + " 23:59:59";
    }

    public static String getStartTimeOfQuarter(String yearnQuarter) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearnQuarter.split("-");
        if (params.length < 2) {
            throw new RuntimeException("参数不正确");
        }
        int quarter = Integer.parseInt(params[1]);
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        cal.set(Calendar.DAY_OF_MONTH, 1);
        if (quarter == 1) {
            cal.set(Calendar.MONTH, Calendar.JANUARY);
        } else if (quarter == 2) {
            cal.set(Calendar.MONTH, Calendar.APRIL);
        } else if (quarter == 3) {
            cal.set(Calendar.MONTH, Calendar.JULY);
        } else if (quarter == 4) {
            cal.set(Calendar.MONTH, Calendar.OCTOBER);
        }
        return sdf.format(cal.getTime()) + " 00:00:00";
    }

    public static String getEndTimeOfQuarter(String yearnQuarter) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        String[] params = yearnQuarter.split("-");
        int quarter = Integer.parseInt(params[1]);
        cal.set(Calendar.YEAR, Integer.parseInt(params[0]));
        if (quarter == 1) {
            cal.set(Calendar.MONTH, Calendar.MARCH);
            int num = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            cal.set(Calendar.DAY_OF_MONTH, num);
        } else if (quarter == 2) {
            cal.set(Calendar.MONTH, Calendar.JUNE);
            int num = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            cal.set(Calendar.DAY_OF_MONTH, num);
        } else if (quarter == 3) {
            cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
            int num = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            cal.set(Calendar.DAY_OF_MONTH, num);
        } else if (quarter == 4) {
            cal.set(Calendar.MONTH, Calendar.DECEMBER);
            int num = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            cal.set(Calendar.DAY_OF_MONTH, num);
        }
        return sdf.format(cal.getTime()) + " 23:59:59";
    }

    public static String getStartTimeOfYear(String year) {
        return year + "-01-01 00:00:00";
    }

    public static String getEndTimeOfYear(String year) {
        return year + "-12-31 23:59:59";
    }

    public static String fixToTwoDigitStr(Integer param) {
        if (param < 10) {
            return "0" + param;
        } else {
            return param + "";
        }
    }

    /**
     * @Author liuliang
     * 获取某一个周对应的开始日期和结束日期
     */

    public static Map getBeginAndEndTimeOfWeek(int year, int week) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, 0, 1);
        int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
        week = week - 2;//周数减去第一周再减去要得到的周
        calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        //周一

        String dateStart = sf.format(calendar.getTime());
        //System.out.println(dateStart);
        calendar.add(Calendar.DAY_OF_YEAR, 6);

        //周日
        String dateEnd = sf.format(calendar.getTime());
        //System.out.println(dateEnd);

        Map<String, String> map = new HashMap<>();
        map.put("startDate", dateStart);
        map.put("dateEnd", dateEnd);
        return map;
    }

    public static int getDayNumBetween(Date date1, Date date2) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        //不在同一年
        if (year1 != year2) {
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                {
                    timeDistance += 366;
                } else    //不是闰年
                {
                    timeDistance += 365;
                }
            }
            return timeDistance + (day2 - day1);
        } else {//同一年
            System.out.println("判断day2 - day1 : " + (day2 - day1));
            System.out.println(day2 - day1);
            return day2 - day1;
        }
    }


    public static void main(String[] args) throws ParseException {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = sdf.parse("2019-01-01");
        cal.setTime(d);
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));

        System.out.println(cal.get(Calendar.WEEK_OF_YEAR));

        System.out.println(getLastMonth(new Date(),"yyyyMM"));

    }


    /**
     * String格式日期加1秒(分钟或小时)
     *
     * @param str
     * @param n   秒
     * @return
     */
    public static String getAddTime(String str, Integer n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        try {
            date = df.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        date.setTime(date.getTime() + n * 1000);
        return df.format(date);

    }


    /**
     * 获取当前是本年第几周
     *
     * @return int
     * @Author liuliang
     * @Description
     * @Date 获取当前是本年第几周
     * @Param [str, n]
     **/
    public static int getNowWeekOfYear() {
        Calendar calendar = Calendar.getInstance();
        int i = calendar.get(Calendar.WEEK_OF_YEAR);
        return i;
    }

    /**
     * 判断一个时间是否在另一个时间之前个时间是否在另一个时间之前
     *
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return 判断结果
     */
    public static boolean before(String time1, String time2) {
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);

            if (dateTime1.before(dateTime2)) {
                return true;
            }
        } catch (Exception e) {
            System.out.println(time1);
            System.out.println(time2);
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断一个时间是否在另一个时间之后
     *
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return 判断结果
     */
    public static boolean after(String time1, String time2) {
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);

            if (dateTime1.after(dateTime2)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 计算时间差值(单位为秒)
     *
     * @param time1 时间1
     * @param time2 时间2
     * @return 差值
     */
    public static int minus(String time1, String time2) {
        try {
            Date datetime1 = TIME_FORMAT.parse(time1);
            Date datetime2 = TIME_FORMAT.parse(time2);

            long millisecond = datetime1.getTime() - datetime2.getTime();

            return Integer.valueOf(String.valueOf(millisecond / 1000));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 获取年月日和小时
     *
     * @param datetime 时间(yyyy-MM-dd HH:mm:ss)
     * @return 结果(yyyy-MM-dd_HH)
     */
    public static String getDateHour(String datetime) {
        String date = datetime.split(" ")[0];
        String hourMinuteSecond = datetime.split(" ")[1];
        String hour = hourMinuteSecond.split(":")[0];
        return date + "_" + hour;
    }

    /**
     * 获取当天日期(yyyy-MM-dd)
     *
     * @return 当天日期
     */
    public static String getTodayDate() {
        return DATE_FORMAT.format(new Date());
    }

    /**
     * 获取当天日期(yyyy-MM-dd HH:mm:ss)
     *
     * @return 当天时间
     */
    public static String getTodayTime() {
        return TIME_FORMAT.format(new Date());
    }

    /**
     * 获取昨天的日期(yyyy-MM-dd)
     *
     * @return 昨天的日期
     */
    public static String getYesterdayDate() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DAY_OF_YEAR, -1);

        Date date = cal.getTime();

        return DATE_FORMAT.format(date);
    }

    /**
     * 获取昨天的日期(yyyMMdd)
     *
     * @return 当月
     */
    public static String getMonthDate() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());

        Date date = cal.getTime();

        return DATEKEY_FORMAT.format(date);
    }

    public static String getMonthDate(String date,int addMonth) {
        SimpleDateFormat df = new SimpleDateFormat("yyyyMM");
        try {
            Date month = df.parse(date);
            Calendar cal = Calendar.getInstance();
            cal.setTime(month);
            cal.add(Calendar.MONTH,addMonth);
            return  df.format(cal.getTime());
        } catch (ParseException e) {
            e.printStackTrace( );
        }

        return getLastMonth(new Date(),"yyyyMM");
    }

    /**
     * 获取明天的日期(yyyy-MM-dd)
     *
     * @return 明天的日期
     */
    public static String getMingday() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DAY_OF_YEAR, 1);

        Date date = cal.getTime();

        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化日期(yyyy-MM-dd)
     *
     * @param date Date对象
     * @return 格式化后的日期
     */
    public static String formatDate(Date date) {
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化时间(yyyy-MM-dd HH:mm:ss)
     *
     * @param date Date对象
     * @return 格式化后的时间
     */
    public static String formatTime(Date date) {
        return TIME_FORMAT.format(date);
    }

    /**
     * 解析时间字符串
     *
     * @param time 时间字符串
     * @return Date
     */
    public static Date parseTime(String time) {
        try {
            return TIME_FORMAT.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 格式化日期key
     *
     * @param date
     * @return
     */
    public static String formatDateKey(Date date) {
        return DATEKEY_FORMAT.format(date);
    }

    /**
     * 格式化日期key
     *
     * @param datekey
     * @return
     */
    public static Date parseDateKey(String datekey) {
        try {
            return DATEKEY_FORMAT.parse(datekey);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 格式化时间,保留到分钟级别
     * yyyyMMddHHmm
     *
     * @param date
     * @return
     */
    public static String formatTimeMinute(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        return sdf.format(date);
    }

    /**
     * 格式化时间,保留到M秒级别
     * yyyyMMddHHmm
     *
     * @param date
     * @return
     */

    public static String formatTimeMillis(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return sdf.format(date);
    }

    /**
     * 获取给定日期的前一分钟
     */
    public static String getYestoMinute(String dateMin) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        Date parse = null;
        try {
            parse = sdf.parse(dateMin);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(parse);
        cal.add(Calendar.MINUTE, -1); // 设置为前一分钟
        Date time = cal.getTime();
        String format = sdf.format(time);
        return format;
    }

    /**
     * 获取过去n分钟
     */
    public static String getLastMin(int lastMinute) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        Date parse = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(parse);
        cal.add(Calendar.MINUTE, lastMinute); // 设置为前分钟
        Date time = cal.getTime();
        String format = sdf.format(time);
        return format;
    }

    /**
     * 获取给定日期的前一小时
     */
    public static String getYestoHour(String dateMin) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        Date parse = null;
        try {
            parse = sdf.parse(dateMin);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(parse);
        cal.add(Calendar.HOUR, -1); // 设置为前一分钟
        Date time = cal.getTime();
        String format = sdf.format(time);
        return format;
    }

    public static String getRangeTime(String dateTime) {
        //2018-09-13 18:02:57  dateTime
        String date = dateTime.split(" ")[0];
        String hour = dateTime.split(" ")[1].split(":")[0];

        int minute = com.bcht.bigdata.dsjmh.api.utils.StringUtils.convertStringtoInt(dateTime.split(" ")[1].split(":")[1]);

//		 String second = dateTime.split(" ")[1].split(":")[2];
        if (minute + (5 - minute % 5) == 60) {
            return date + " " + hour + ":" + com.bcht.bigdata.dsjmh.api.utils.StringUtils.fulfuill((minute - (minute % 5)) + "") + "~" + date + " " + com.bcht.bigdata.dsjmh.api.utils.StringUtils.fulfuill((Integer.parseInt(hour) + 1) + "") + ":00";
        }
        return date + " " + hour + ":" + com.bcht.bigdata.dsjmh.api.utils.StringUtils.fulfuill((minute - (minute % 5)) + "") + "~" + date + " " + hour + ":" + com.bcht.bigdata.dsjmh.api.utils.StringUtils.fulfuill((minute + (5 - minute % 5)) + "");
    }

    /**
     * 获取给定时间段内所有天数
     */
    public static List<String> findDaysStr(String begintTime, String endTime) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Date dBegin = null;
        Date dEnd = null;
        try {
            dBegin = sdf.parse(begintTime);
            dEnd = sdf.parse(endTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        List<String> daysStrList = new ArrayList<String>();
        daysStrList.add(sdf.format(dBegin));
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(dBegin);
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(dEnd);
        while (dEnd.after(calBegin.getTime())) {
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            String dayStr = sdf.format(calBegin.getTime());
            daysStrList.add(dayStr);
        }
        return daysStrList;
    }

    //适应多格式的年度变化 用数字计算
    public static String getYearAgo(String time,int ago){
        String year = "";
        if (time.contains("-"))
            year = time.substring(0,time.indexOf("-"));
        if (time.contains(" "))
            year = time.substring(0,time.indexOf(" "));
        if (time.length()>=4)
            year = time.substring(0,4);
        return (Integer.parseInt(year)+ago)+time.substring(year.length());
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值