All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kedauis.util.DateUtil Maven / Gradle / Ivy

The newest version!
package com.kedauis.util;

import org.springframework.util.StringUtils;

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

/**
 * 项目名称:kd-uip
 * 类描述:
 * 创建人:QiuYu
 * 创建时间:2017/12/22 16:47
 * 修改人:
 * 修改时间:
 * 修改备注:
 */
public class DateUtil {

    /**
     * author QiuYu
     * date 2017/12/29
     * time 13:31
     * description 格式化时间
     * @param date 要格式化的日期
     * @param dateFormat 格式
     * @return 格式化后的时间
     */
    public static String format(String dateFormat, Date date) {
        return new SimpleDateFormat(dateFormat).format(date);
    }

    /**
     * author QiuYu
     * date 2017/12/29
     * time 13:30
     * description 格式化时间
     * @param calendar 要格式化的日期
     * @param dateFormat 格式
     * @return 格式化后的时间
     */
    public static String format(String dateFormat, Calendar calendar) {
        return format(dateFormat, calendar.getTime());
    }

    /**
     * author QiuYu
     * date 2018/1/4
     * time 9:53
     * description 按照指定格式获取日期
     * @param dateFormat 格式化格式
     * @param dateStr 日期
     * @return 解析后的日期
     */
    public static Date parse(String dateFormat, String dateStr){
        try {
            return new SimpleDateFormat(dateFormat).parse(dateStr);
        } catch (ParseException e) {

        }
        return null;
    }


    /**
     * author QiuYu
     * date 2017/12/22
     * time 16:48
     * descriptione 获取yyyy-MM-dd HH:mm:ss格式的当前日期字符串
     * @return 日期字符串
     */
    public static String getNowDateStr() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(Calendar.getInstance().getTime());
    }

    /**
     * author QiuYu
     * date 2017/12/22
     * time 16:48
     * descriptione 获取yyyyMMddHHmmss格式的当前日期字符串
     * @return 获取时间格式的字符串
     */
    public static String getNowTimeStr() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        return dateFormat.format(Calendar.getInstance().getTime());
    }

    /**
     * 获取时间间隔(按天)
     * @param stime 开始时间
     * @param etime 结束时间
     * @return 间隔
     */
    public static long getBetweenDays(String stime, String etime) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date sdate = null;
        Date eDate = null;
        try {
            sdate = df.parse(stime);
            eDate = df.parse(etime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long betweendays = (long) ((eDate.getTime() - sdate.getTime()) / (1000 * 60 * 60 * 24) + 0.5);//天数间隔
        return betweendays;
    }

    protected static SimpleDateFormat dateLongFormat = new SimpleDateFormat("yyyyMMddHHmmss");

    protected static SimpleDateFormat yearMonthFormat = new SimpleDateFormat("yyyyMM");

    protected static SimpleDateFormat dateDtFormat = new SimpleDateFormat("yyyyMMdd");

    protected static SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");

    /**
     * 方法说明:获取某月最后一天
     *
     * @param year  年份,例如2017
     * @param month 月份,1-12
     * @param day 日期
     * @return String 例如"20170331"
     **/
    public static String lastDayOfMonth(int year, int month, Integer day) {

        StringBuffer result = new StringBuffer("");

        if (month == 0 || month > 12) {
            return result.toString();
        }

        Calendar calendar = Calendar.getInstance();
        int currentMonth = calendar.get(Calendar.MONTH) + 1;

        //若为当前月份,则返回今天日期
//        if(month == currentMonth) {
//            if(null == day) {
//                day = calendar.get(Calendar.DAY_OF_MONTH);
//            }
//            result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
//            return result.toString();
//        }

        //1,3,5,7,8,10,12月
        if (month == 1 || month == 3 || month == 5 || month == 7 ||
                month == 8 || month == 10 || month == 12) {
            if (null == day) {
                day = 31;
            }
            result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
        }

        //2月
        if (month == 2) {
            if (null == day) {
                if (isLeapYear(year)) {
                    result.append(year).append(formatToTwo(month)).append("29");
                } else {
                    result.append(year).append(formatToTwo(month)).append("28");
                }
            } else {
                result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
            }

        }

        //4,6,9,11月
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            if (null == day) {
                day = 30;
            }
            result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
        }

        return result.toString();
    }

    /**
     * 判断闰年
     * @param year 判断年限
     * @return 是否是闰年
     */
    public static Boolean isLeapYear(int year) {
        if ((year % 4 == 0 && year % 100 != 00) || year % 400 == 0) return true;
        return false;
    }

    /**
     * 格式化为两位字符串
     * @param index 要格式化的数字
     * @return 格式化后的数字
     */
    public static String formatToTwo(int index) {
        if (index < 10) {
            return "0" + index;
        }
        return "" + index;
    }

    /**
     * 获取最近12个月月末日期
     * @param dateStr 例如 20170308
     * @return 月末集合
     **/
    public static List getRecent12Months(String dateStr) {
        List result = new ArrayList();
        if (StringUtils.isEmpty(dateStr) || dateStr.length() != 8) {
            return result;
        }

        String yearStr = dateStr.substring(0, 4);
        String monthStr = dateStr.substring(4, 6);
        Integer day = Integer.parseInt(dateStr.substring(6, 8));

        int year = Integer.parseInt(yearStr);
        int month = Integer.parseInt(monthStr);

        int offsetLastYear = 12 - month;
        //去年
        for (int i = 1; i <= offsetLastYear; i++) {
            int lastYear = year - 1;
            int monthLastYear = month + i;
            result.add(lastDayOfMonth(lastYear, monthLastYear, null));
        }

        //今年
        for (int j = 1; j <= month; j++) {
            if (j == month) {
                result.add(lastDayOfMonth(year, j, day));
            } else {
                result.add(lastDayOfMonth(year, j, null));
            }
        }

        return result;
    }


    /**
     * 获取上月的同一天日期
     * @param date 时间
     * @return 上月的同一天
     */
    public static String getDateOfLastMonth(Calendar date) {
        Calendar lastDate = (Calendar) date.clone();
        lastDate.add(Calendar.MONTH, -1);
        Date last = lastDate.getTime();
        return dateDtFormat.format(last);
    }

    /**
     * 获取上月的同一天日期
     * @param dateStr 日期
     * @return 上月的同一天
     * @throws ParseException 日期解析异常
     */
    public static String getDateOfLastMonth(String dateStr) throws ParseException {
        Date date = dateDtFormat.parse(dateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return getDateOfLastMonth(calendar);
    }

    /**
     * 方法说明:获取今天日期
     * @return String 例如"20170331"
     **/
    public static String getCurrentDate() {
        return dateDtFormat.format(new Date());
    }

    /**
     * 方法说明:获取昨天日期
     *
     * @param date 指定日期
     * @return String 例如"20170331"
     **/
    public static String getDateOfYesterday(Calendar date) {
        Calendar lastDay = (Calendar) date.clone();
        lastDay.add(Calendar.DATE, -1);
        Date yesterday = lastDay.getTime();
        return dateDtFormat.format(yesterday);
    }

    /**
     * 获取上月最后一天
     * @param calendar 日期
     * @return 指定日期上月的最后一天
     */
    public static String getLastDayOfLastMonth(Calendar calendar) {
        Calendar date = (Calendar) calendar.clone();
        date.set(Calendar.DAY_OF_MONTH, 1);
        date.add(Calendar.DATE, -1);
        Date last = date.getTime();
        return dateDtFormat.format(last);
    }

    /**
     * 获取今年所有月份最后一天
     * @return 今年所有月份最后一天
     */
    public static List getLastDayOfMonthOfThisYear() {
        List list = new ArrayList();
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;

        for (int i = 1; i <= month; i++) {
            String date = lastDayOfMonth(year, i, null);
            list.add(date);
        }

        return list;
    }

    /**
     * 格式化月份
     * @param month 月份
     * @return 格式后的月份
     */
    public static String formatMonth(String month) {
        if (month.substring(0, 4).equals(yearFormat.format(new Date()))) {
            return Integer.parseInt(month.substring(4, 6)) + "月";
        }
        return month;
    }

    /**
     * 获取上一个月份
     * @param recentMonth 最近月份
     * @return 上月月份
     */
    public static String getFormerMonth(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        Integer month = Integer.parseInt(recentMonth.substring(4, 6));
        if (month == 1) {
            return "" + (year - 1) + 12;
        } else if (month == 12 || month == 11) {
            return "" + year + (month - 1);
        } else {
            return "" + year + "0" + (month - 1);
        }
    }

    /**
     * 获取上一个月份
     * @param recentMonth 最近月份
     * @return 上月月份
     */
    public static String getFormerLastMonth(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        Integer month = Integer.parseInt(recentMonth.substring(4, 6));
        if (month == 1) {
            return "" + (year - 1) + 11;
        } else if (month == 12) {
            return "" + year + (month - 2);
        } else {
            return "" + year + "0" + (month - 2);
        }
    }

    /**
     * 获取月份的方法
     * @param date 日期
     * @return 所在月份
     * @throws ParseException 时间解析错误
     */
    public static int getMonth(String date) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        Date time = dateDtFormat.parse(date);
        calendar.setTime(time);
        int month = calendar.get(Calendar.MONTH) + 1; //注意月份是从0开始的,比如当前7月,获得的month为6
        return month;
    }

    /**
     * 获取当前年月
     * @return 当前年月
     */
    public static String getCurrentYearMonth() {
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
        String dateNowStr = sdf.format(d);
        return dateNowStr;
    }

    /**
     * 月份有几天
     * @param recentMonth 月份
     * @return 月中日期
     */
    public static List getMonthDays(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        Integer month = Integer.parseInt(recentMonth.substring(4, 6));
        String lastDate = lastDayOfMonth(year, month, null);
        Integer dayNums = Integer.parseInt(lastDate.substring(6, 8));
        List days = new ArrayList<>();
        for (int i = 1; i < dayNums + 1; i++) {
            days.add(i);
        }
        return days;
    }

    /**
     * 获取近30天日期
     * @param calendar 日期
     * @return 近30天日期
     */
    public static List getRecent30Days(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        calendar.add(Calendar.MONTH, -1);
        int lastMonth = calendar.get(Calendar.MONTH) + 1;
        int daysOfLastMonth = calendar.getActualMaximum(Calendar.DATE);

        List dateList = new ArrayList();
        if (month == 1) {
            if (day < 30) {
                int diff = 30 - day;
                for (int i = diff - 1; i >= 0; i--) {
                    StringBuffer stringBuffer = new StringBuffer();
                    stringBuffer.append(year - 1).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
                    dateList.add(stringBuffer.toString());
                }
            }
        } else if (month == 3) {
            if (day < 30) {
                int diff = 30 - day;
                if (daysOfLastMonth < diff) {
                    int diff2 = 30 - day - daysOfLastMonth;
                    for (int i = diff2 - 1; i >= 0; i--) {
                        StringBuffer stringBuffer = new StringBuffer();
                        stringBuffer.append(year).append("01").append(formatToTwo(31 - i));
                        dateList.add(stringBuffer.toString());
                    }
                    for (int j = 1; j <= daysOfLastMonth; j++) {
                        StringBuffer stringBuffer = new StringBuffer();
                        stringBuffer.append(year).append("02").append(formatToTwo(j));
                        dateList.add(stringBuffer.toString());
                    }
                } else {
                    for (int i = diff - 1; i >= 0; i--) {
                        StringBuffer stringBuffer = new StringBuffer();
                        stringBuffer.append(year).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
                        dateList.add(stringBuffer.toString());
                    }
                }
            }

        } else {
            if (day < 30) {
                int diff = 30 - day;
                for (int i = diff; i >= 0; i--) {
                    StringBuffer stringBuffer = new StringBuffer();
                    stringBuffer.append(year).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
                    dateList.add(stringBuffer.toString());
                }
            }

        }

        for (int j = 1; j <= day; j++) {
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append(year).append(formatToTwo(month)).append(formatToTwo(j));
            dateList.add(stringBuffer.toString());
        }

        return dateList;
    }

    /**
     * 获取昨天日期
     * @param dateStr 日期
     * @return 昨天日期
     * @throws ParseException 解析异常
     */
    public static String getDateOfYesterday(String dateStr) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        Date date = dateDtFormat.parse(dateStr);
        calendar.setTime(date);
        calendar.add(Calendar.DATE, -1);
        Date yesterday = calendar.getTime();
        return dateDtFormat.format(yesterday);
    }

    /**
     * 获取昨天日期
     * @return 昨天日期
     */
    public static String getLastCurrent() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = dateDtFormat.format(cal.getTime());
        return yesterday;

    }

    /**
     * 获取本月第一天
     * @param dateStr 日期
     * @return 日期所在月第一天
     * @throws ParseException 解析异常
     */
    public static String getFirstDayOfThisMonth(String dateStr) throws ParseException {
        Date date = dateDtFormat.parse(dateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return dateDtFormat.format(calendar.getTime());
    }

    /**
     * 获取本月到本月第一天天数
     * @param dateStr 日期
     * @return 天数
     */
    public static int getDaysNum(String dateStr) {
        Calendar calendar = Calendar.getInstance();
        String dayStr = dateStr.substring(6);
        return Integer.parseInt(dayStr);
    }

    /**
     * 方法说明:获取第一个月份
     * @param strMonth  给定月份
     * @return String 例如"201701"
     **/
    public static String getFirstMonth(String strMonth) {
        if ("01".equalsIgnoreCase(strMonth.substring(4, 6))) {
            return strMonth;
        } else {
            String year = strMonth.substring(0, 4);
            return year + "01";
        }
    }

    /**
     * 获取上一年同一个月份
     * @param recentMonth 月份
     * @return 上年同一个月
     */
    public static String getLastYearCurrentMonth(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        Integer month = Integer.parseInt(recentMonth.substring(4, 6));
        return "" + (year - 1) + month;
    }

    /**
     * 获取上一年最后一个月份
     * @param recentMonth 月份
     * @return 上年同一个月
     */
    public static String getLastYearLastMonth(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        return "" + (year - 1) + "12";
    }

    /**
     * 获取上一年倒数第二个月份
     * @param recentMonth 月份
     * @return 上年倒数第二个月
     */
    public static String getLastYearNovMonth(String recentMonth) {
        Integer year = Integer.parseInt(recentMonth.substring(0, 4));
        return "" + (year - 1) + "11";
    }


    /**
     * 方法说明:获取上一个小时
     * @return String 例如"00-23"
     * yyyyMMddHHmmss
     **/
    public static String getPreviousHour() {
        String date = dateLongFormat.format(new Date());
        String currentHour = date.substring(8, 10);
        if ("00".equalsIgnoreCase(currentHour)) {
            return "23";
        } else {
            return (Integer.valueOf(currentHour) - 1) + "";
        }
    }

    /**
     * 获取当前月份
     * @return 当前月份
     */
    public static String getCurrentMonth() {
        String month = yearMonthFormat.format(new Date());
        return month;
    }

    /**
     * 获取当前年份
     * @return 当前年份
     */
    public static String getCurrentYear() {
        String year = yearFormat.format(new Date());
        return year;
    }

    /**
     * 获取去年年份
     * @return 去年年份
     */
    public static String getLastYearCurrent() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - 1);
        int year = cal.get(Calendar.YEAR);
        return String.valueOf(year);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy