Java工具类DateUtil

import org.apache.commons.lang3.StringUtils;

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

/**
 * 功能描述:日期工具
 */
public final class DateUtil {


    /**
     * 此函数实现:给定日期和经过天数,算出结果日期
     * 其中:
     * sDate为指定日期,iDate为多少时间段(可以是 年、月、日...  具体根据iCal来确定)
     * iCal为某种时间段例如  月:Calendar.MONTH(具体可查询api中Calendar类)
     * sStr为日期格式 例如:"yyyyMMdd"(具体可查询api中Calendar类)
     *
     * @param sDate
     * @param iDate
     * @param iCal
     * @param sStr
     * @return
     */
    public static String getNextDate(String sDate, int iDate, int iCal, String sStr) {
        String sNextDate = "";
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat(sStr);
        Date date = null;
        try {
            date = formatter.parse(sDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        calendar.setTime(date);
        calendar.add(iCal, iDate);
        sNextDate = formatter.format(calendar.getTime());
        return sNextDate;
    }


    /**
     * 执行型别转换:字符串表示的日期--->>日期型日期
     * <li>1 格式为 yyyy-MM-dd
     * <li>2 格式为 yyyy-MM-dd HH:mm:ss
     * <li>3 格式为 yyyy/MM/dd HH:mm:ss
     * <li>4 格式为 yy-MM-dd HH:mm:ss
     * <li>5 格式为 yyyy年MM月dd日 HH时mm分ss秒
     * <li>6 格式为 dd/MM/yyyy
     * <li>7 格式为 yyyy年MM月dd日 HH时mm分
     * <li>8 格式为 HH:mm:ss
     * <li>9 格式为 yyyy-MM-ddHH:mm
     * <li>默认格式为 yy年MM月dd日 HH时mm分ss秒
     */
    public static Date stringToDate(final int style, String strDate) {

        SimpleDateFormat format = null;

        if (null == strDate || "".equals(strDate) || "null".equals(strDate)) {

            return null;
        } else {

            switch (style) {
                case 1:
                    format = new SimpleDateFormat("yyyy-MM-dd");
                    break;
                case 2:
                    format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    break;
                case 3:
                    format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                    break;
                case 4:
                    format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
                    break;
                case 5:
                    format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
                    break;
                case 6:
                    format = new SimpleDateFormat("dd/MM/yyyy");
                    break;
                case 7:
                    format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
                    break;
                case 8:
                    format = new SimpleDateFormat("HH:mm:ss");
                    break;
                case 9:
                    format = new SimpleDateFormat("yyyy-MM-ddHH:mm");
                    break;
                case 10:
                    format = new SimpleDateFormat("MM/dd/yyyy");
                    break;
                default:
                    format = new SimpleDateFormat("yy年MM月dd日 HH时mm分ss秒");
                    break;
            }
            try {
                return format.parse(strDate);
            } catch (ParseException e) {
                return null;
            }
        }
    }

    /**
     * 获取当天日期的前一天日期
     *
     * @return
     */
    public static String getYesterdayDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        date = calendar.getTime();
        return sdf.format(date);
    }

    /**
     * 执行型别转换:日期型日期--->>字符串表示的日期
     * <li>1 格式为 yyyy-MM-dd
     * <li>2 格式为 yyyy-MM-dd HH:mm:ss
     * <li>3 格式为 yyyy/MM/dd HH:mm:ss
     * <li>4 格式为 yy-MM-dd HH:mm:ss
     * <li>5 格式为 yyyy年MM月dd日 HH时mm分ss秒
     * <li>6 格式为 yyyy年MM月dd日
     * <li>7 格式为 yy-MM-dd
     * <li>8 格式为 HH:mm:ss
     * <li>9 格式为 yyyy年MM月dd日 HH时mm分
     * <li>10 格式为 yyyyMMdd HH:mm
     * <li>11 格式为 HH:mm
     * <li>12 格式为 yyyy年MM月dd日E
     * <li>默认格式为 yy年MM月dd日 HH时mm分ss秒
     */
    public static String dateToString(final int style, Date date) {

        SimpleDateFormat format = null;

        if (null == date || "null".equals(date) || "".equals(date)) {

            return "";
        } else {

            switch (style) {
                case 1:
                    format = new SimpleDateFormat("yyyy-MM-dd");
                    break;
                case 2:
                    format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    break;
                case 3:
                    format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                    break;
                case 4:
                    format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
                    break;
                case 5:
                    format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
                    break;
                case 6:
                    format = new SimpleDateFormat("yyyy年MM月dd日");
                    break;
                case 7:
                    format = new SimpleDateFormat("yy-MM-dd");
                    break;
                case 8:
                    format = new SimpleDateFormat("HH:mm:ss");
                    break;
                case 9:
                    format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
                    break;
                case 10:
                    format = new SimpleDateFormat("yyyyMMdd HH:mm");
                    break;
                case 11:
                    format = new SimpleDateFormat("HH:mm");
                    break;
                case 12:
                    format = new SimpleDateFormat("yyyy年MM月dd日E");
                    break;
                case 13:
                    format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                    break;
                default:
                    format = new SimpleDateFormat("yy年MM月dd日 HH时mm分ss秒");
                    break;
            }
            try {
                return format.format(date);
            } catch (NumberFormatException e) {
                return "";
            }
        }
    }

    /**
     * long毫秒时间转字符串时间
     *
     * @param longDate
     * @return
     */
    public static String longDateToString(String longDate) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = "";
        if (StringUtils.isNotBlank(longDate)) {
            try {
                strDate = format.format(new Date(Long.parseLong(longDate)));
                return strDate;
            } catch (Exception e) {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 执行型别转换:字符串表示的日期--->>日期型日期
     */
    public static Date stringToDate(final String format, String strDate) {

        SimpleDateFormat dateFormat = null;

        if (null == strDate || "".equals(strDate) || "null".equals(strDate)) {

            return null;
        } else {

            dateFormat = new SimpleDateFormat(format);
            try {
                return dateFormat.parse(strDate);
            } catch (ParseException e) {
                return null;
            }
        }
    }

    /**
     * 执行型别转换:日期型日期--->>字符串表示的日期
     */
    public static String dateToString(final String format, Date date) {

        SimpleDateFormat dateFormat = null;

        if (null == date || "".equals(date) || "null".equals(date)) {

            return "";
        } else {

            dateFormat = new SimpleDateFormat(format);
            try {
                return dateFormat.format(date);
            } catch (NumberFormatException nfe) {
                return "";
            }
        }
    }

    /**
     * 获取当前日期的long值对应的字符串
     */
    public synchronized static String getTimeStamp() {
        Date d = new Date();
        return String.valueOf(d.getTime());
    }

    /**
     * 获取当前年份
     */
    public static final int getCurrentYear() {

        return new GregorianCalendar().get(GregorianCalendar.YEAR);
    }

    public static String getCurrentDay() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        String strDate = formatter.format(new Date());
        return strDate.substring(4, 8);
    }

    public static String getCurrentWeek() {
        int week = new GregorianCalendar().get(GregorianCalendar.DAY_OF_WEEK);
        if (week == 1) {
            return "日";
        } else if (week == 2) {
            return "一";
        } else if (week == 3) {
            return "二";
        } else if (week == 4) {
            return "三";
        } else if (week == 5) {
            return "四";
        } else if (week == 6) {
            return "五";
        } else {
            return "六";
        }
    }

    public static String getWeek(Date date) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        int week = calendar.get(GregorianCalendar.DAY_OF_WEEK);
        if (week == 1) {
            return "星期日";
        } else if (week == 2) {
            return "星期一";
        } else if (week == 3) {
            return "星期二";
        } else if (week == 4) {
            return "星期三";
        } else if (week == 5) {
            return "星期四";
        } else if (week == 6) {
            return "星期五";
        } else {
            return "星期六";
        }
    }

    /**
     * 得到指定时间在指定天数之后的时间(传入负整数表示之前)
     */
    public static Date getDateAfter(Date date, int afterDay) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, afterDay);
        return calendar.getTime();
    }

    /**
     * 得到指定时间在指定小时数之后的时间(传入负整数表示之前)
     */
    public static Date getDateAfterHour(Date date, int afterHour) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, afterHour);
        return calendar.getTime();
    }

    /**
     * 得到指定时间在指定分钟数之后的时间(传入负整数表示之前)
     */
    public static Date getDateAfterMinute(Date date, int afterMinute) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, afterMinute);
        return calendar.getTime();
    }

    /**
     * 得到指定时间在指定秒数之后的时间(传入负整数表示之前)
     */
    public static Date getDateAfterSecond(Date date, int afterSecond) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.SECOND, afterSecond);
        return calendar.getTime();
    }

    /**
     * 获得一个时间(Date对象)在当天的起始时刻的时间(Date对象)
     */
    public static Date getDayStart(Date date) {

        String dateStr = dateToString("yyyy-MM-dd", date);
        date = stringToDate("yyyy-MM-dd", dateStr);
        return date;
    }

    /**
     * 判断两个时间(Date对象)精确到天数以后是否相等
     */
    public static boolean dateEquals(Date date1, Date date2) {
        String d1 = dateToString("yyyy-MM-dd", date1);
        String d2 = dateToString("yyyy-MM-dd", date2);
        if (d1.equalsIgnoreCase(d2)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 得到指定时间在指定几个月之后的时间(传入负整数表示之前)
     */
    public static Date getDateAfterMonth(Date date, int afterMonth) {
        Calendar calendar = Calendar.getInstance();//日历对象
        calendar.setTime(date);//设置当前日期
        calendar.add(Calendar.MONTH, afterMonth);//月份减一
        return calendar.getTime();
    }

    /**
     * 根据日期获取季度
     *
     * @param dates
     * @return
     */
    public static String getQuarter(Date dates) {
        String quarter = "";
        if (dates != null) {
            String dateTime = com.yntravelsky.util.DateUtil.dateToString("yyyy-MM-dd", dates);
            String m = dateTime.substring(5, 7);
            int month = Integer.parseInt(m);
            switch (month) {
                case 1:
                case 2:
                case 3:
                    quarter = "第一季度";
                    break;
                case 4:
                case 5:
                case 6:
                    quarter = "第二季度";
                    break;
                case 7:
                case 8:
                case 9:
                    quarter = "第三季度";
                    break;
                case 10:
                case 11:
                case 12:
                    quarter = "第四季度";
                    break;
            }
        }
        return quarter;
    }

    public static int checkDate(String strDate) {
        SimpleDateFormat sdf = null;

        if (null == strDate || "".equals(strDate) || "null".equals(strDate)) {

            return 0;
        } else {

            sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date date = sdf.parse(strDate);
                return 1;
            } catch (ParseException e) {
                return 0;
            }
        }
    }

    /**
     * 两个时间之间相差多少天
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     * @throws ParseException
     */
    public static int computeDays(String startTime, String endTime) throws ParseException {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = simpleFormat.parse(startTime);
        Date endDate = simpleFormat.parse(endTime);
        long start = startDate.getTime();
        long end = endDate.getTime();
        int days = (int) ((end - start) / (1000 * 60 * 60 * 24));
        return days;
    }

    /**
     * 两个时间之间相差多少小时
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     * @throws ParseException
     */
    public static int computeHours(String startTime, String endTime) throws ParseException {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = simpleFormat.parse(startTime);
        Date endDate = simpleFormat.parse(endTime);
        long start = startDate.getTime();
        long end = endDate.getTime();
        int hours = (int) ((end - start) / (1000 * 60 * 60));
        return hours;
    }

    /**
     * 两个时间之间相差多少分钟
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     * @throws ParseException
     */
    public static int computeMinutes(String startTime, String endTime) throws ParseException {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = simpleFormat.parse(startTime);
        Date endDate = simpleFormat.parse(endTime);
        long start = startDate.getTime();
        long end = endDate.getTime();
        int minutes = (int) ((end - start) / (1000 * 60));
        return minutes;
    }

}

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页