zoukankan      html  css  js  c++  java
  • DateUtils工具类

    import org.apache.commons.lang3.StringUtils;
    import org.apache.commons.lang3.time.DateUtils;
    
    import java.math.BigDecimal;
    import java.math.RoundingMode;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    /**
     * 线程安全的date工具类
     *
     * @author jiaozi
     */
    public class SmartDateUtil extends DateUtils {
    
        private static final ThreadLocal<DateFormats> dateFormats = new ThreadLocal<DateFormats>() {
            @Override
            protected DateFormats initialValue() {
                return new DateFormats();
            }
        };
    
        public static final int HOUR_MIN = 60;
    
        public static final int DAY_MI_SECOND = 24 * 60 * 60 * 1000;
    
        public static String formatYMD(Date date) {
            return dateFormats.get().ymd.format(date);
        }
    
        public static String formatYMDDigital(Date date) {
            return dateFormats.get().ymdDigital.format(date);
        }
    
        public static String formatYMDHMSDigital(Date date) {
            return dateFormats.get().ymdhmsDigital.format(date);
        }
    
        public static String formatYM(Date date) {
            return dateFormats.get().ym.format(date);
        }
    
        public static String formatHMS(Date date) {
            return dateFormats.get().hms.format(date);
        }
    
        public static String formatHM(Date date) {
            return dateFormats.get().hm.format(date);
        }
    
        public static String formatYMDHM(Date date) {
            return dateFormats.get().ymdhm.format(date);
        }
    
        public static String formatYMDHMS(Date date) {
            return dateFormats.get().ymdhms.format(date);
        }
    
        public static String formatYMDChinese(Date date) {
            return dateFormats.get().ymdChinese.format(date);
        }
    
        public static String formatYMDSlash(Date date) {
            return dateFormats.get().ymdSlash.format(date);
        }
    
        public static Date parseYMD(String dateStr) {
            return parse(dateFormats.get().ymd, dateStr);
        }
    
        public static Date parseYMDDigital(String dateStr) {
            return parse(dateFormats.get().ymdDigital, dateStr);
        }
    
        public static Date parseYMDHMSDigital(String dateStr) {
            return parse(dateFormats.get().ymdhmsDigital, dateStr);
        }
    
        public static Date parseformatYMDChinese(String dateStr) {
            return parse(dateFormats.get().ymdChinese, dateStr);
        }
    
        public static Date parseYM(String dateStr) {
            return parse(dateFormats.get().ym, dateStr);
        }
    
        public static Date parseYMDHMS(String dateStr) {
    
            return parse(dateFormats.get().ymdhms, dateStr);
        }
    
        public static Date parseYMDHM(String dateStr) {
            return parse(dateFormats.get().ymdhm, dateStr);
        }
    
        public static Date parseTodayHMS(String dateStr) {
            String today = formatYMD(new Date());
            String todayDateStr = String.format("%s %s", today, dateStr);
            return parse(dateFormats.get().ymdhms, todayDateStr);
        }
    
        /**
         * 判断当前时间是否在某段时间内 参数不区分先后顺序
         */
        public static boolean isDuringTwoDate(Date date, Date another) {
            long dateTime = date.getTime();
            long anotherTime = another.getTime();
            long currentTime = System.currentTimeMillis();
    
            if (currentTime > dateTime && currentTime < anotherTime) {
                return true;
            } else if (currentTime > anotherTime && currentTime < dateTime) {
                return true;
            } else {
                return false;
            }
        }
    
        public static Date parse(SimpleDateFormat format, String dateStr) {
            try {
                Date d = format.parse(dateStr);
                Calendar c = Calendar.getInstance();
                c.setTime(d);
                int year = c.get(Calendar.YEAR);
                if (year >= 1000 && year <= 9999) {
                    return d;
                } else {
                    return null;
                }
            } catch (Exception ex) {
                return null;
            }
        }
    
        public static long daysOffset(Date date1, Date date2) {
            date1 = parseYMD(formatYMD(date1));
            date2 = parseYMD(formatYMD(date2));
            return (date1.getTime() - date2.getTime()) / DAY_MI_SECOND;
        }
    
        /**
         * 今天是星期几 , 7表示星期日
         *
         * @return
         */
        public static int getTodayDayOfWeek() {
            Calendar now = Calendar.getInstance();
            int dayOfweek = now.get(Calendar.DAY_OF_WEEK);
            dayOfweek--;
            if (dayOfweek == 0) {
                dayOfweek = 7;
            }
            return dayOfweek;
        }
    
        public static boolean isTodaytDay(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            Calendar todayCalendar = Calendar.getInstance();
            if (calendar.get(Calendar.YEAR) != todayCalendar.get(Calendar.YEAR)) {
                return false;
            } else if (calendar.get(Calendar.MONTH) != todayCalendar.get(Calendar.MONTH)) {
                return false;
            } else if (calendar.get(Calendar.DAY_OF_MONTH) != todayCalendar.get(Calendar.DAY_OF_MONTH)) {
                return false;
            }
            return true;
        }
    
        /**
         * 设置Calendar的小时、分钟、秒、毫秒
         *
         * @param calendar 日历
         * @param hour 小时
         * @param minute 分钟
         * @param second 秒
         * @param milliSecond 毫秒
         */
        public static void setCalender(Calendar calendar, int hour, int minute, int second, int milliSecond) {
            calendar.set(Calendar.HOUR_OF_DAY, hour);
            calendar.set(Calendar.MINUTE, minute);
            calendar.set(Calendar.SECOND, second);
            calendar.set(Calendar.MILLISECOND, milliSecond);
        }
    
        /**
         * 获取指定天开始时间
         *
         * @param date 日期
         * @return 获得该日期的开始
         */
        public static Date getDayBegin(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            setCalender(calendar, 0, 0, 0, 0);
            return calendar.getTime();
        }
    
        /**
         * 获取指定天结束时间
         *
         * @param date 日期
         * @return 获得该日期的结束
         */
        public static Date getDayEnd(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            setCalender(calendar, 23, 59, 59, 999);
            return calendar.getTime();
        }
    
        /**
         * 获取该日期当月第一天
         *
         * @param date
         * @return
         */
        public static Date getMonthBegin(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(getDayBegin(date));
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            return calendar.getTime();
        }
    
        /**
         * 获取该日期当月最后一天getAgeByBirthday
         *
         * @param date
         * @return
         */
        public static Date getMonthEnd(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(getDayEnd(date));
            calendar.add(Calendar.MONTH, 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.DAY_OF_MONTH, - 1);
            return calendar.getTime();
        }
    
        public static String timeDifference(Date endDate) {
            Date nowDate = new Date();
            long nd = 1000 * 24 * 60 * 60;
            long nh = 1000 * 60 * 60;
            long nm = 1000 * 60;
            // 获得两个时间的毫秒时间差异
            long diff = nowDate.getTime() - endDate.getTime();
            // 计算差多少天
            long day = diff / nd;
            if (day > 0) {
                return day + "天前";
            }
            // 计算差多少小时
            long hour = diff % nd / nh;
            if (hour > 0) {
                return hour + "小时前";
            }
            // 计算差多少分钟
            long min = diff % nd % nh / nm;
            if (min > 0) {
                return "1小时内";
            }
            return "1小时内";
        }
    
        /**
         * 计算所用时长
         *
         * @param startDate
         * @param endDate
         * @return
         */
        public static BigDecimal timeDifferenceMin(Date startDate, Date endDate) {
            long nm = 1000 * 60;
            // 获得两个时间的毫秒时间差异
            long diff = endDate.getTime() - startDate.getTime();
            BigDecimal min = BigDecimal.valueOf(diff).divide(BigDecimal.valueOf(nm), RoundingMode.HALF_UP);
            return min;
        }
    
        /**
         * 功能描述: 是否为当天
         *
         * @param dateStr yyyy-mm-dd
         * @return
         * @auther yandanyang
         * @date 2018/10/16 0016 下午 17:43
         */
        public static boolean isCurrentDayYMD(String dateStr) {
            if (StringUtils.isEmpty(dateStr)) {
                return true;
            }
            String current = SmartDateUtil.formatYMD(new Date());
            if (current.equals(dateStr)) {
                return true;
            }
            return false;
        }
    
        /**
         * 功能描述: 是否为当月
         *
         * @param dateStr yyyy-mm-dd
         * @return
         * @auther yandanyang
         * @date 2018/10/16 0016 下午 17:43
         */
        public static boolean isCurrentMonthYMD(String dateStr) {
            if (StringUtils.isEmpty(dateStr)) {
                return true;
            }
            String queryDate = SmartDateUtil.formatYM(SmartDateUtil.parseYMD(dateStr));
            String current = SmartDateUtil.formatYM(new Date());
            if (current.equals(queryDate)) {
                return true;
            }
            return false;
        }
    
        public static boolean isCurrentMonthYM(String dateStr) {
            if (StringUtils.isEmpty(dateStr)) {
                return true;
            }
            String current = SmartDateUtil.formatYM(new Date());
            if (current.equals(dateStr)) {
                return true;
            }
            return false;
        }
    
        /**
         * 获取本周的开始时间
         *
         * @return
         */
        public static Date getBeginDayOfWeek() {
            Date date = new Date();
            if (date == null) {
                return null;
            }
            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);
            return getDayBegin(cal.getTime());
        }
    
        /**
         * 获取本周的结束时间
         *
         * @return
         */
        public static Date getEndDayOfWeek() {
            Calendar cal = Calendar.getInstance();
            cal.setTime(getBeginDayOfWeek());
            cal.add(Calendar.DAY_OF_WEEK, 6);
            Date weekEndSta = cal.getTime();
            return getDayEnd(weekEndSta);
        }
    
        /**
         * 获取两个日期区间的日期(包括这两个日期)
         */
        public static List<String> getiIntervalDate(String dateBegin, String dateEnd) {
            List<String> dateList = new ArrayList<>();
            Date startDate = SmartDateUtil.parseYMD(dateBegin);
            Date endDate = SmartDateUtil.parseYMD(dateEnd);
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            dateList.add(dateBegin);
            while (cal.getTime().compareTo(endDate) < 0) {
                cal.add(Calendar.DAY_OF_MONTH, 1);
                dateList.add(SmartDateUtil.formatYMD(cal.getTime()));
            }
            return dateList;
        }
    
        /**
         * 返回某个日期后几天的日期
         *
         * @param date
         * @param i
         * @return
         */
        public static Date getNextDay(Date date, int i) {
            Calendar cal = new GregorianCalendar();
            cal.setTime(date);
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);
            return cal.getTime();
        }
    
        /**
         * 返回某个日期前几天的日期
         *
         * @param date
         * @param i
         * @return
         */
        public static Date getFrontDay(Date date, int i) {
            Calendar cal = new GregorianCalendar();
            cal.setTime(date);
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);
            return cal.getTime();
        }
    
        /**
         * 获取昨天的开始时间
         *
         * @return
         */
        public static Date getBeginDayOfYesterday() {
            Calendar cal = new GregorianCalendar();
            cal.setTime(getDayBegin(new Date()));
            cal.add(Calendar.DAY_OF_MONTH, - 1);
            return cal.getTime();
        }
    
        /**
         * 获取昨天的结束时间
         *
         * @return
         */
        public static Date getEndDayOfYesterDay() {
            Calendar cal = new GregorianCalendar();
            cal.setTime(getDayEnd(new Date()));
            cal.add(Calendar.DAY_OF_MONTH, - 1);
            return cal.getTime();
        }
    
        public static Integer getDayNumOfMonth(Date date) {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            Integer num = c.getActualMaximum(Calendar.DAY_OF_MONTH);
            return num;
        }
    
        /**
         * 转换日期(格式:年-月-日 时:分--分自定义)
         */
        public static String formatYMDH(Date date, String minute) {
            String ymdhm = dateFormats.get().ymdh + ":" + minute;
            SimpleDateFormat format = new SimpleDateFormat(ymdhm);
            return format.format(date);
        }
    
        /**
         * 获取几个月后的日期
         */
        public static Date getAfterMonth(Date inputDate, int number) {
            Calendar c = Calendar.getInstance();//获得一个日历的实例
            c.setTime(inputDate);//设置日历时间
            c.add(Calendar.MONTH, number);//在日历的月份上增加月
            return c.getTime();
        }
    
        /**
         * 计算当前月有多少天
         */
        public static int getDays(int year, int month) {
            int days = 0;
            if (month != 2) {
                switch (month) {
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        days = 31;
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        days = 30;
    
                }
            } else {
                // 闰年
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days = 29;
                } else {
                    days = 28;
                }
            }
            System.out.println("当月有" + days + "天!");
            return days;
        }
    
    }
    
    class DateFormats {
    
        public final SimpleDateFormat hms = new SimpleDateFormat("HH:mm:ss");
    
        public final SimpleDateFormat hm = new SimpleDateFormat("HH:mm");
    
        public final SimpleDateFormat ymdhm = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    
        public final SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd");
    
        public final SimpleDateFormat ym = new SimpleDateFormat("yyyy-MM");
    
        public final SimpleDateFormat ymdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        public final SimpleDateFormat ymdChinese = new SimpleDateFormat("yyyy年MM月dd日");
    
        public final SimpleDateFormat ymdSlash = new SimpleDateFormat("yyyy/MM/dd");
    
        public final SimpleDateFormat ymdDigital = new SimpleDateFormat("yyyyMMdd");
    
        public final SimpleDateFormat ymdhmsDigital = new SimpleDateFormat("yyyyMMddHHmmss");
    
        public static final String ymdh = "yyyy-MM-dd HH";
    }
  • 相关阅读:
    sqlilab-Less-41-53-writeup
    【转载】CPU架构、指令集与指令集体系结构(ISA)
    《鸟哥的Linux私房菜》读书笔记--第0章 计算机概论 硬件部分
    UVA-1602 Lattice Animals 搜索问题(打表+set)
    Python爬虫简单入门及小技巧
    HDU-1043 Eight八数码 搜索问题(bfs+hash 打表 IDA* 等)
    nginx重启命令
    php使用正则过滤js脚本代码实例
    ini_set("display_errors","On");和error_reporting(E_ALL);
    js中NAN、NULL、undefined的区别
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/14293178.html
Copyright © 2011-2022 走看看