DateUtil


package com.zkml.common.util;

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

/**
 * 日期工具类
 *
 * @author :zhaojun on 2016-08-29 16:59
 */
public final class DateUtil {

    /**
     * 格式化格式 yyyy-MM-dd
     */
    public final static String DAY_FORMAT = "yyyy-MM-dd";

    /**
     * 格式化格式 yyyy-MM-dd HH:mm:ss
     */
    public final static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 字符串转换成date类型
     *
     * @param str str
     * @return Date
     * @throws ParseException
     */
    public static Date stringToDate(String str, String dateFormat) {
        if (MyUtil.isBlank(str))
            return null;
        str = str.trim();
        SimpleDateFormat sdf = null;
        if (MyUtil.isNotBlank(dateFormat)) {
            sdf = new SimpleDateFormat(dateFormat);
        } else {
            if (str.length() > 19)
                str = str.substring(0, 19);
            //默认时间类型为 yyyy-MM-dd HH:mm:ss,根据字符长度来截取
            long index = str.length();
            if (index == 4) {
                //年
                sdf = new SimpleDateFormat("yyyy");
            } else if (index == 7) {
                //年月
                sdf = new SimpleDateFormat("yyyy-MM");
            } else if (index == 10) {
                //年月日
                sdf = new SimpleDateFormat("yyyy-MM-dd");
            } else if (index == 13) {
                //年月日 时
                sdf = new SimpleDateFormat("yyyy-MM-dd HH");
            } else if (index == 16) {
                //年月日 时分
                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            } else if (index == 19) {
                //年月日 时分秒
                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            }
        }
        Date date = null;
        try {
            //严格遵守格式转换
            sdf.setLenient(false);
            date = sdf.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 时间转字符串
     *
     * @param date
     * @param dateFormat
     * @return
     */
    public static String dateToString(Date date, String dateFormat) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = null;
        if (MyUtil.isNotBlank(dateFormat)) {
            sdf = new SimpleDateFormat(dateFormat);
        } else {
            sdf = new SimpleDateFormat(DATE_FORMAT);
        }
        //严格遵守格式转换
        sdf.setLenient(false);
        return sdf.format(date);

    }

    /**
     * 根据时间获取前一天的0点
     *
     * @param date
     * @param day  0当前时间 -1昨天 1明天
     * @return
     */
    public static Date getDayBeforeDateStart(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        date = calendar.getTime();
        return date;
    }

    /**
     * 根据时间获取前一天的23:59:59
     *
     * @param date
     * @param day  0当前时间 -1昨天 1明天
     * @return
     */
    public static Date getDayBeforeDateEnd(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        date = calendar.getTime();
        return date;
    }

    /**
     * 在给定日期上追加分钟
     *
     * @param length 追加分钟数值
     * @param date   需要追加值的时间
     * @return 追加后的时间格式格式 yyyy-MM-dd HH:mm:ss
     */
    public static Date addMinuteTime(Date date, int length) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            return sdf.parse(childAddMinuteTime(date, length));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 在给定日期上追加秒数
     *
     * @param length 追加秒数值
     * @param date   需要追加值的时间
     * @return 追加后的时间格式格式 yyyy-MM-dd HH:mm:ss
     */
    public static Date addSecondTime(Date date, int length) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            return sdf.parse(childAddSecondTime(date, length));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Java Calender类获得指定日期加几天
     *
     * @param day 被追加的日期字符串 yyyy-MM-dd 或更精确
     * @param d   day 追加的天数
     * @return 追加后的时间字符串
     */
    public static String addDay(String day, int d) {
        Calendar c = Calendar.getInstance();
        Date date = new Date();
        try {
            date = new SimpleDateFormat(DAY_FORMAT).parse(day);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int length = c.get(Calendar.DATE);
        c.set(Calendar.DATE, length + d);
        return new SimpleDateFormat(DAY_FORMAT).format(c.getTime());
    }

    /**
     * 比较两个时间的大小
     *
     * @param date1 日期1 yyyy-MM-dd HH:mm:ss
     * @param date2 日期2 yyyy-MM-dd HH:mm:ss
     * @return true:date1在date2前  false:date1在date2后 (前后判断以二维时间轴为准)
     */
    public static boolean compareDate(String date1, String date2) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            Date dt1 = sdf.parse(date1);
            Date dt2 = sdf.parse(date2);
            return dt1.getTime() >= dt2.getTime();
//            if (dt1.getTime() > dt2.getTime()) {
            //System.out.println("dt1 在dt2前");
//                flag = true;
//            } else if (dt1.getTime() < dt2.getTime()) {
            //System.out.println("dt1在dt2后");
//                flag = false;
//            }else{
//                System.out.println("两个时间相等");
//                flag = true;
//            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return false;
    }

    /**
     * 在给定日期上追加分钟
     *
     * @param length 追加分钟数值
     * @param date   需要追加值的时间
     * @return 追加后的时间字符串 yyyy-MM-dd HH:mm:ss
     */
    private static String childAddMinuteTime(Date date, int length) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return sdf.format(new Date(new Date().getTime() + length * 60 * 1000));
    }

    /**
     * 在给定日期上追加秒数
     *
     * @param length 追加秒数值
     * @param date   需要追加值的时间
     * @return 追加后的时间字符串 yyyy-MM-dd HH:mm:ss
     */
    private static String childAddSecondTime(Date date, int length) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return sdf.format(new Date(date.getTime() + length * 1000));
    }

    /**
     * 去除Mybatis使用String接收date后缀多的.0
     *
     * @param date 时间的字符串
     * @return 去除后缀.0的字符串
     */
    public static String cutPointZeroSuffix(String date) {
        if (MyUtil.isBlank(date)) {
            return null;
        }
        // 数字中不包含"."  或者 不是 年月日 时分秒
        if (!date.contains(".") || date.length() < 19) {
            return date;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        Date result = null;
        try {
            result = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return sdf.format(result);
    }

    /**
     * 是否周末
     *
     * @param dateStr
     * @return
     */
    public static boolean isWeekend(String dateStr) {
        Date date = stringToDate(dateStr, DAY_FORMAT);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
                || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
    }

    /**
     * 获取当前时间戳毫秒
     *
     * @return long毫秒数
     */
    public static long getCurrentMilTimeStamp() {
        long mils = Calendar.getInstance().getTimeInMillis();
        return mils;
    }

    /**
     * 根据传入时间字符串获取当前时间戳毫秒,eg:2018-06-08 15:12:12
     *
     * @param dateStr dateStr
     * @return long毫秒数
     */
    public static long getCurrentMilTimeStamp(String dateStr) {
        Calendar calendar = Calendar.getInstance();
        try {
            calendar.setTime(new SimpleDateFormat(DATE_FORMAT).parse(dateStr));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long mils = calendar.getTimeInMillis();
        return mils;
    }
}


posted @ 2020-07-13 20:48  荭丶尘  阅读(59)  评论(0编辑  收藏  举报