全网最全的日期格式化工具类

全网最全的日期格式化工具类

日期工具类

  • import lombok.extern.slf4j.Slf4j;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.ZoneId;
    import java.util.*;
    
    /**
     * 时间类型
     */
    @Slf4j
    public class DateUtils {
        /**
         * @param startDate 开始日期
         * @param endDate   结束日期
         * @return 返回相差的天数
         */
        public static int differentDaysByString(String startDate, String endDate) {
            int days = 0;
            try {
                days = (int) ((Objects.requireNonNull(parseDate(endDate)).getTime() - Objects.requireNonNull(parseDate(startDate)).getTime()) / (1000 * 3600 * 24));
            } catch (ParseException e) {
                log.info("数据异常" + e.getMessage());
            }
            return days;
        }
    
        /**
         * 日期格式转换
         *
         * @param date 日期
         * @return 日期格式
         */
        public static Date parseDate(String date) throws ParseException {
            if (date.isEmpty()) {
                return null;
            }
            return new SimpleDateFormat("yyyy-MM-dd").parse(date);
        }
    
        /**
         * 获取10为的时间戳 0点0分0秒的
         * @param time 时间
         * @return 时间戳
         */
        public static long timestampPlaceZeroZeroPointsZeroSecondsGetString(String time) {
            LocalDate startDate = LocalDate.parse(time);
            LocalDateTime startDateTime = startDate.atTime(LocalTime.MIN);
            return startDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() / 1000;
        }
    
        /**
         * 获取10为时间戳  24点59分59秒
         * @param time 时间
         * @return 时间戳
         */
        public static long timestampTwentyThreeFiftyNineMinutesAndFiftyNineSecondsGetString(String time) {
            LocalDate date = LocalDate.parse(time);
            LocalDateTime dateTime = date.atTime(LocalTime.MAX);
            return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() / 1000;
        }
    
    
        /**
         * 切换为中文日期
         * @param time 时间
         * @return 中文日期
         */
        public static String getChinaDateByMm(long time) {
            String retDate = "";
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
            retDate = formatter.format(time);
            return retDate;
        }
    
        /**
         * 字符串转时间格式 第二个参数定义格式化格式
         *
         * @param strDate
         * @param formater
         * @return
         */
        public static Date str2Date(String strDate, String formater) {
            if (strDate == null) {
                return null;
            }
            if (formater == null) {
                formater = "yyyy-MM-dd";
            }
            SimpleDateFormat df = new SimpleDateFormat(formater);
            Date date = new Date();
            try {
                date = df.parse(strDate);
            } catch (ParseException pe) {
                pe.getStackTrace();
            }
            return date;
        }
    
        /**
         * yyyy-MM-dd格式的字符串转日期类型
         *
         * @param strDate
         * @return
         */
        public static Date ymdStr2Date(String strDate) {
            String formater = "yyyy-MM-dd";
            return str2Date(strDate, formater);
        }
    
        /**
         * yyyy-MM-dd HH:mm:ss 格式的字符串转日期类型
         *
         * @param strDate
         * @return
         */
        public static Date ymdHmsStr2Date(String strDate) {
            String formater = "yyyy-MM-dd HH:mm:ss";
            return str2Date(strDate, formater);
        }
    
        /**
         * 默认格式的字符串转日期类型
         *
         * @param date
         * @return
         */
        public static String ymd(Date date) {
            return formaterDate(date, null);
        }
    
        public static String formaterDate(Date date, String formater) {
            if (date == null) {
                return "";
            }
            if (formater == null) {
                formater = "yyyy-MM-dd";
            }
            SimpleDateFormat sdf = new SimpleDateFormat(formater);
            return sdf.format(date);
        }
    
        /**
         * 将日期格式的数据转成yyyy-MM-dd HH:mm格式字符串
         *
         * @param date
         * @return
         */
        public static String ymdHm(Date date) {
            return formaterDate(date, "yyyy-MM-dd HH:mm");
        }
    
        /**
         * 将日期格式的数据转成yyyyMMddHHmmss格式字符串
         *
         * @param date
         * @return
         */
        public static String yyyyMMddHHmmss(Date date) {
            return formaterDate(date, "yyyyMMddHHmmss");
        }
    
        /**
         * 将日期格式的数据转成HH:mm:ss格式字符串
         *
         * @param date
         * @return
         */
        public static String hms(Date date) {
            String s = formaterDate(date, "yyyy-MM-dd HH:mm:ss");
            s = s.substring(11);
            return s.replaceAll(":", "");
        }
    
        /**
         * 获取字符串格式的当前时间,不包含日期
         *
         * @return
         */
        public static String hms() {
            return hms(new Date());
        }
    
        /**
         * 将日期格式的数据转成yyyy-MM-dd格式字符串
         *
         * @param date
         * @return
         */
        public static String ym(Date date) {
            return formaterDate(date, "yyyy-MM-dd");
        }
    
        /**
         * @param @param  date
         * @param @return 设定文件
         * @return String    返回类型
         * @throws
         * @Title: md
         * @Description: TODO(将时间格式转换成 MM - dd 格式的字符串)
         */
        public static String md(Date date) {
            return formaterDate(date, "MM-dd");
        }
    
        /**
         * 将日期格式的数据转成yyyy-MM-dd HH:mm:ss格式字符串
         *
         * @param date
         * @return
         */
        public static String ymdHms(Date date) {
            return formaterDate(date, "yyyy-MM-dd HH:mm:ss");
        }
    
        public static Date ymdhmsStr2Date(String strDate) {
            String formater = "yyyyMMddHHmmss";
            return str2Date(strDate, formater);
        }
    
        /**
         * yyyyMMddHHmmss to yyyy-MM-dd HH:mm:ss
         *
         * @param str
         * @return
         */
        public static String ymdhms2yMdHms(String str) {
            return ymdHms(ymdhmsStr2Date(str));
        }
    
        /**
         * 把时分秒置0
         *
         * @param strDate
         * @return
         */
        public static Date toh00m00s00(Date strDate) {
            String yyymmdd = DateUtils.ymd(strDate);
            String date = yyymmdd + " 00:00:00";
            return DateUtils.ymdHmsStr2Date(date);
        }
    
        /**
         * 把时分秒置23:59:59
         *
         * @param strDate
         * @return
         */
        public static Date toh23m59s59(Date strDate) {
            String yyymmdd = DateUtils.ymd(strDate);
            String date = yyymmdd + " 23:59:59";
            return DateUtils.ymdHmsStr2Date(date);
        }
    
        // 计算当月最后一天,返回字符串
        public static String getMonthLastDay() {
            Calendar c = Calendar.getInstance();
            c.set(Calendar.DATE, 1);// 设为当前月的1号
            c.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
            c.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
            return ymd(c.getTime());
        }
    
        // 计算当月第一天,返回字符串
        public static String getMonthFirstDay() {
            Calendar c = Calendar.getInstance();
            c.set(Calendar.DATE, 1);// 设为当前月的1号
            return ymd(c.getTime());
        }
    
        /**
         * 获得距当前时间前后N天的日期
         *
         * @param day
         * @return
         */
        public static String getDayFromToday(int day) {
            Calendar c = Calendar.getInstance();
            c.setTime(new Date());
            c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + day);
            return ym(c.getTime());
        }
    
        /**
         * 获得距当前时间前后N小时的日期
         *
         * @param day
         * @return
         */
        public static Date getHourFromToday(int day) {
            Calendar c = Calendar.getInstance();
            c.setTime(new Date());
            c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY) + day);
            return c.getTime();
        }
    
        public static List<Date> getDatesBetweenTwoDate(Date beginDate, Date endDate) {
            List<Date> lDate = new ArrayList();
            lDate.add(beginDate);
            Calendar cal = Calendar.getInstance();
    
            cal.setTime(beginDate);
            boolean bContinue = true;
            while (bContinue) {
                cal.add(5, 1);
                if (!endDate.after(cal.getTime())) {
                    break;
                }
                lDate.add(cal.getTime());
            }
            lDate.add(endDate);
            return lDate;
        }
    
        /**
         * 通过时间秒毫秒数判断两个时间的间隔
         *
         * @param date1
         * @param date2
         * @return
         */
        public static int differentDaysByMillisecond(Date date1, Date date2) {
            int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
            return days;
        }
    
        /*
         * 获取当前时间的上一个月的开始时间
         */
        public static Date getMonthBeginlast(Date date) {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            c.set(Calendar.MONTH, c.get(Calendar.MONTH) - 1);
            //设置为1号,当前日期既为本月第一天
            c.set(Calendar.DAY_OF_MONTH, 1);
            //将小时至0
            c.set(Calendar.HOUR_OF_DAY, 0);
            //将分钟至0
            c.set(Calendar.MINUTE, 0);
            //将秒至0
            c.set(Calendar.SECOND, 0);
            //将毫秒至0
            c.set(Calendar.MILLISECOND, 0);
            // 获取本月第一天的时间戳
            return c.getTime();
        }
    
        /*
         * 获取当前时间的上一个月的开始时间
         */
        public static Date getMonthEndlast(Date date) {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            c.set(Calendar.MONTH, c.get(Calendar.MONTH) - 1);
            //设置为当月最后一天
            c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
            //将小时至23
            c.set(Calendar.HOUR_OF_DAY, 23);
            //将分钟至59
            c.set(Calendar.MINUTE, 59);
            //将秒至59
            c.set(Calendar.SECOND, 59);
            //将毫秒至999
            c.set(Calendar.MILLISECOND, 999);
            // 获取本月最后一天的时间戳
            return c.getTime();
        }
    
        public static String getWeek(Date date) {
            SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
            String week = sdf.format(date);
            return week;
        }
    
        /**
         * 获得距当前时间前后N天的日期
         *
         * @param day
         * @return
         */
        public static Date getDayFromTodayDate(int day) {
            Calendar c = Calendar.getInstance();
            c.setTime(new Date());
            c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + day);
            return c.getTime();
        }
    
        /**
         * 获取指定日期是星期几
         * <p>
         * 参数为null时表示获取当前日期是星期几
         *
         * @param date
         * @return
         */
        public static String getWeekOfDate(Date date) {
            String[] weekOfDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
            Calendar calendar = Calendar.getInstance();
            if (date != null) {
                calendar.setTime(date);
            }
            int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
            if (w < 0) {
                w = 0;
            }
            return weekOfDays[w];
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值