java日期帮助类(格式化日期、获取当月第一天、获取今年某月的最后一天、获得本季度、是否闰年、获取包含今年在内的最近5年、判断指定的字符串是否是日期格式等等帮助方法,欢迎使用和指点)

package com.cnksi.utils;

import com.cnksi.app.model.WechatWorkDate;
import org.apache.commons.lang.time.DateUtils;

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

public class DateUtil {
    private DateUtil() {
    }

    public static Date subDate(Date date, int minutes) {
        long times = date.getTime();
        times = times - minutes * 60 * 1000;
        return new Date(times);
    }

    /**
     * yyyy-MM-dd
     */
    static SimpleDateFormat sdfYmd = new SimpleDateFormat("yyyy-MM-dd");

    public static SimpleDateFormat timeFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * yyyy-MM-dd HH:mm:ss
     */
    static SimpleDateFormat sdfYmdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * yyyy年MM月dd日
     */
    static SimpleDateFormat sdfNyr = new SimpleDateFormat("yyyy年MM月dd日");

    /**
     * 字符串转换为日期,格式:yyyy-MM-dd
     *
     * @param stringDate
     * @return
     */
    public static Date string2Date(String stringDate) {
        Date date = null;
        try {
            date = sdfYmd.parse(stringDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 字符串转换为日期,格式:yyyy-MM-dd HH:mm:ss
     *
     * @param stringDate
     * @return
     */
    public static Date toDateYmdHms(String stringDate) {
        Date date = null;
        try {
            date = sdfYmdhms.parse(stringDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 将字符串的时间转换为Date类型
     *
     * @param operDate
     * @return
     */
    public static Date turnStr2Date(String operDate) {

        if (StringUtil.isEmpty(operDate)) {
            return null;
        }

        // 如果excel中的日期是2016-8-23,取出的值是42606,此数字是距离1900年1月1日的天数,以下是转换成2016-8-23格式代码
        Date operDateTime;
        if (StringUtil.isNumeric(operDate)) {
            int operDateInt = 0;
            try {
                operDateInt = Integer.valueOf(operDate).intValue();
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
            Calendar c = new GregorianCalendar(1900, 0, -1);
            Date time = c.getTime();
            operDateTime = DateUtils.addDays(time, operDateInt); // 42605是距离1900年1月1日的天数

        } else {
            try {
                operDateTime = StringUtil.notBlank(operDate) ? DateUtil.string2Date(operDate, "yyyy年MM月dd日") : null;
            } catch (Exception e) {
                operDateTime = StringUtil.notBlank(operDate) ? DateUtil.string2Date(operDate, "yyyy-MM-dd") : null;
            }
        }
        return operDateTime;
    }

    /**
     * 根据给定的格式,格式化字符串
     *
     * @param stringDate
     * @param formatString
     * @return
     */
    public static Date string2Date(String stringDate, String formatString) {
        SimpleDateFormat dd = new SimpleDateFormat(formatString);
        Date date = null;
        try {
            date = dd.parse(stringDate);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return date;
    }

    /**
     * 指定格式,执行日期格式化
     *
     * @param date
     * @param formatStr 指定格式
     * @return
     */
    public static String date2String(Date date, String formatStr) {
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        return sdf.format(date);
    }

    /**
     * yyyy-MM-dd
     *
     * @param date
     * @return yyyy-MM-dd
     */
    public static String date2String(Date date) {
        return sdfYmd.format(date);
    }

    /**
     * @param date
     * @return yyyy-MM-dd_HH-mm-ss-sss
     */
    public static String date2Stringhms(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss-sss");
        return sdf.format(date);
    }

    /**
     * @param date
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String date2Stringhms2(Date date) {
        return sdfYmdhms.format(date);
    }

    /**
     * 格式化:yyyy年MM月dd日
     *
     * @param date
     * @return
     */
    public static String date2String2(Date date) {
        return sdfNyr.format(date);
    }

    // 获取当月第一天
    public static String getFirstDayOfCurrentMonth() {
        return getFirstDayOfMonth(null);
    }

    /**
     * 获取某月的第一天
     *
     * @param month 月份,为空表示当月
     * @return
     */
    public static String getFirstDayOfMonth(Integer month) {
        String str = "";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        Calendar lastDate = Calendar.getInstance();

        lastDate.set(Calendar.DATE, 1);// 设为当前月的1号

        if (month != null) {

            lastDate.set(Calendar.MONTH, month - 1); // Calendar.MONTH从0开始
        }

        str = sdf.format(lastDate.getTime());

        return str;
    }

    /**
     * 获取今年某月的最后一天
     *
     * @param month 月份,为空表示当月
     * @return
     */
    public static String getLastDayOfMonth(Integer month) {

        String str = "";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        Calendar lastDate = Calendar.getInstance();

        lastDate.set(Calendar.DATE, 1);// 设为当前月的1号

        if (month != null) {

            lastDate.set(Calendar.MONTH, month - 1); // Calendar.MONTH从0开始
        }

        lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号

        lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天

        str = sdf.format(lastDate.getTime());

        return str;

    }

    /**
     * 获得某年某月的最后一天
     *
     * @param year  年
     * @param month 月
     * @return
     */
    public static String getLastDayStrOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        //设置年份
        cal.set(Calendar.YEAR, year);
        //设置月份
        cal.set(Calendar.MONTH, month - 1);
        //获取某月最大天数
        int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        //设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        //格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(cal.getTime());
    }

    // 计算当月最后一天,返回字符串
    public static String getLastOfCurrentMonth() {
        return getLastDayOfMonth(null);
    }

    // 获得本年第一天的日期
    public static String getCurrentYearFirst() {
        int yearPlus = DateUtil.getYearPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, yearPlus);
        Date yearDay = currentDate.getTime();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 可以方便地修改日期格式
        String preYearDay = dateFormat.format(yearDay);
        return preYearDay;
    }

    // 获得本年最后一天的日期 *
    public static String getCurrentYearEnd() {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
        String years = dateFormat.format(date);
        return years + "-12-31";
    }

    public static int getCurrentYear() {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        return year;
    }

    public static int getCalendarCurrentMonth() {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.MONTH);
        return year;
    }

    private static int getYearPlus() {
        Calendar cd = Calendar.getInstance();
        int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天
        cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
        cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
        int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
        if (yearOfNumber == 1) {
            return -MaxYear;
        } else {
            return 1 - yearOfNumber;
        }
    }

    // 获得本季度
    public static String getThisSeasonTime(int month) {
        int array[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
        int season = 1;
        if (month >= 1 && month <= 3) {
            season = 1;
        }
        if (month >= 4 && month <= 6) {
            season = 2;
        }
        if (month >= 7 && month <= 9) {
            season = 3;
        }
        if (month >= 10 && month <= 12) {
            season = 4;
        }
        int start_month = array[season - 1][0];
        int end_month = array[season - 1][2];

        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
        String years = dateFormat.format(date);
        int years_value = Integer.parseInt(years);

        int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
        int end_days = DateUtil.getLastDayOfMonth(years_value, end_month);
        String seasonDate = years_value + "-" + start_month + "-" + start_days + ";" + years_value + "-" + end_month + "-" + end_days;
        return seasonDate;

    }

    /**
     * 获取某年某月的最后一天
     *
     * @param year  年
     * @param month 月
     * @return 最后一天
     */
    public static int getLastDayOfMonth(int year, int month) {
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            return 31;
        }
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            return 30;
        }
        if (month == 2) {
            if (DateUtil.isLeapYear(year)) {
                return 29;
            } else {
                return 28;
            }
        }
        return 0;
    }

    /**
     * 是否闰年
     *
     * @param year 年
     * @return
     */
    public static boolean isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }

    /**
     * 本周一 , yyyy-MM-dd
     *
     * @return
     */
    public static String getFirstDayOfWeek() {
        Calendar cal = Calendar.getInstance();
        // 设置每周第一天为星期一 (默认是星期日)
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return sdfYmd.format(cal.getTime());
    }

    public static String getLastDayOfWeek() {
        Calendar cal = Calendar.getInstance();
        // 设置每周第一天为星期一 (默认是星期日)
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        return sdfYmd.format(cal.getTime());
    }

    // 获取包含今年在内的最近5年
    public static List getLastFiveYears() {
        List list = new ArrayList();
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        list.add(year - 2);
        list.add(year - 1);
        list.add(year);
        list.add(year + 1);
        list.add(year + 2);
        return list;

    }

    // 获取包含今年在内的最近5年
    public static List getMonthOfYear() {
        List list = new ArrayList();
        for (int i = 1; i <= 12; i++) {
            list.add(i);
        }
        return list;

    }

    public static String getCurrentMonth() {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM");// 可以方便地修改日期格式
        String month = dateFormat.format(date);
        return month;
    }

    /**
     * 判断指定的字符串是否是日期格式
     *
     * @param str
     * @return
     */
    public static boolean isValidDate(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        str = str.trim();
        boolean convertSuccess = true;
        // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
        SimpleDateFormat formatOne = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat formatTwo = new SimpleDateFormat("yyyy/MM/dd");
        try {
            // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
            formatOne.setLenient(false);
            formatOne.parse(str);
        } catch (ParseException e) {
            try {
                formatTwo.setLenient(false);
                formatTwo.parse(str);
            } catch (ParseException pe) {
                // e.printStackTrace();
                // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
                convertSuccess = false;
            }
        }
        return convertSuccess;
    }

    /**
     * 验证该日期是否大于今天
     *
     * @param date
     * @return
     */
    public static boolean timeOut(String date) {
        if (date.length() >= 10) {
            date = date.substring(0, 10);
        }
        date = date.trim();
        if (date.contains("/")) {
            date = date.replaceAll("/", "-");
        }
        java.sql.Date logDate = java.sql.Date.valueOf(date);
        // 通过Calendar获得当前日期
        Date now;
        Calendar c = Calendar.getInstance();
        now = new Date(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH));
        return logDate.after(now);
    }

    /**
     * 获取某段时这里写代码片间内的所有日期
     *
     * @param dBegin 开始
     * @param dEnd   结束
     * @return 所有日期
     */
    public static List findDates(Date dBegin, Date dEnd) {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
        List lDate = new ArrayList<>();
        lDate.add(formatDate.format(dBegin.getTime()));
        Calendar calBegin = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calBegin.setTime(dBegin);
        Calendar calEnd = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calEnd.setTime(dEnd);
        // 测试此日期是否在指定日期之后
        while (dEnd.after(calBegin.getTime())) {
            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            lDate.add(DateUtil.date2String(calBegin.getTime()));
        }
        return lDate;
    }

    /**
     * 获取昨天的日期
     *
     * @return 如 2018-05-14
     */
    public static String getYesterdayRange() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.DATE, -1);
        return dateFormat.format(calendar.getTime());
    }

    /**
     * 获得指定日期的前一天
     *
     * @param specifiedDay 指定的日期
     * @return 指定日期的前一天日期
     */
    public static String getSpecifiedDayBefore(String specifiedDay) {
        Calendar c = Calendar.getInstance();
        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day - 1);
        String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
        return dayBefore;
    }

    // 测试代码
    public static void main(String[] args) {
    }
}

你可能感兴趣的:(java,帮助类,date)