SpringBoot中封装Date工具类

简介: SpringBoot中封装Date工具类

SpringBoot中封装Date工具类

对Date进行封装,覆盖绝大部分场景、搬到项目中就可以直接使用。

public class DateUtil {
    public static final String yyyy__MM__dd = "yyyy/MM/dd";
    public static final String yyyy_MM_dd = "yyyy-MM-dd";
    public static final String HH_mm_ss = "HH:mm:ss";
    public static final String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
    public static final String yyyyMMddHHmmss = "yyyyMMddHHmmss";
    public static final String yyyyMMddHHmmssfff = "yyyyMMddHHmmssSSS";
    public static final String yyyy_MM_dd_HH_mm_ss_fff = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String yyyy_MM_dd_HH_mm_ss_fffffff = "yyyy-MM-dd HH:mm:ss.SSSSSSS";
    private static long nd = 1000 * 24 * 60 * 60;//每天毫秒数
    private static long nh = 1000 * 60 * 60;//每小时毫秒数
    private static long nm = 1000 * 60;//每分钟毫秒数
    public static final Date DEFAULT_DATE = parseDate("1970-01-01");
    private final static TimeZone timeZone = TimeZone.getTimeZone("GMT+08:00");
    /**
     * 获取日期的格式化字符串
     *
     * @param date    待格式化日期
     * @param pattern 格式模式,可选DateUtil的公开静态定义
     * @return
     */
    public static String formatDate(@NotNull Date date, @NotNull String pattern) {
        try {
            return getDateFormat(pattern).format(date);
        } catch (Exception ex) {
            return null;
        }
    }
    /**
     * 获取日期的格式化字符串(默认格式:yyyy-MM-dd)
     *
     * @param date 待格式化日期
     * @return
     */
    public static String formatDate(@NotNull Date date) {
        return formatDate(date, yyyy_MM_dd);
    }
    /**
     * 将日期字符串转换成日期对象
     *
     * @param dateStr 待转换字符串
     * @param pattern 格式模式,可选DateUtil的公开静态定义
     * @return
     * @throws ParseException
     */
    public static Date parseDate(@NotNull String dateStr, @NotNull String pattern) {
        try {
            return getDateFormat(pattern).parse(dateStr);
        } catch (ParseException ex) {
            return null;
        }
    }
    /**
     * 将日期字符串转换成日期对象(默认格式:yyyy-MM-dd)
     *
     * @param dateStr 待转换字符串
     * @return
     * @throws ParseException
     */
    public static Date parseDate(@NotNull String dateStr) {
        return parseDate(dateStr, yyyy_MM_dd);
    }
    /**
     * 根据生日判断是否为成年人
     *
     * @param birthday
     * @return
     */
    public static boolean isAdult(Date birthday) {
        Calendar calendar = Calendar.getInstance(timeZone);
        calendar.add(Calendar.YEAR, -18);
        return calendar.getTime().after(birthday);
    }
    private static DateFormat getDateFormat(String pattern) {
        return new SimpleDateFormat(pattern);
    }
    /**
     * 指定日期 进行 指定类型 加减
     *
     * @param date         指定日期,可选,默认当前时间
     * @param calendarType Calendar指定类型 如: 分钟用 Calendar.MINUTE
     * @param no           加减数
     * @return Date 计算后的日期
     */
    public static Date dateCalculation(Date date, int calendarType, int no) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date == null ? new Date() : date);
        calendar.add(calendarType, no);
        return calendar.getTime();
    }
    /**
     * 通过时间秒毫秒数判断两个时间间隔天数(满24小时进1天)
     *
     * @param date1 被减时间
     * @param date2
     * @return
     */
    public static int differentDaysByMillisecond(Date date1, Date date2) {
        return (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
    }
    /**
     * 获取指定时间的小时数
     *
     * @param date
     * @return
     */
    public static int getHours(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }
    /**
     * 获取指定时间的分钟
     *
     * @param date
     * @return
     */
    public static int getMinutes(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }
    /**
     * 返回日期加X天后的日期
     *
     * @param date
     * @param i
     * @return
     */
    public static Date addDay(Date date, int i) {
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(GregorianCalendar.DATE, i);
            return calendar.getTime();
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 返回日期加X分钟后后的日期
     *
     * @param date
     * @param i
     * @return
     */
    public static Date addMinute(Date date, int i) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(GregorianCalendar.MINUTE, i);
        return calendar.getTime();
    }
    /**
     * 获取指定日期的日期部分
     *
     * @param date
     * @return
     */
    public static Date getDatePart(Date date) {
        return DateUtil.parseDate(DateUtil.formatDate(date, DateUtil.yyyy_MM_dd), DateUtil.yyyy_MM_dd);
    }
    /**
     * 获取指定日期的时间部分
     *
     * @param date
     * @return
     */
    public static String getTimePart(Date date) {
        return DateUtil.formatDate(date, DateUtil.HH_mm_ss);
    }
    /**
     * 指定字符串转换成标准时间部分(HH:mm:ss格式)
     *
     * @param str
     * @return
     */
    public static String convertTimePart(String str) {
        if (StringUtils.isEmpty(str)) return "";
        String[] array = str.split(":");
        if (array.length == 1) {
            return (array[0].length() == 1 ? "0" + array[0] : array[0]) + ":00:00";
        }
        if (array.length == 2) {
            return (array[0].length() == 1 ? "0" + array[0] : array[0]) + ":" +
                    (array[1].length() == 1 ? "0" + array[1] : array[1]) + ":00";
        }
        if (array.length == 3) {
            return DateUtil.formatDate(DateUtil.parseDate(str, DateUtil.HH_mm_ss), DateUtil.HH_mm_ss);
        }
        return str;
    }
    /**
     * 获取到店时间
     *
     * @param startDate 入住日
     * @param earliest  true为获取最早到店时间,false为最晚到店时间
     * @return
     */
    public static Date getArrivalTime(Date startDate, boolean earliest) {
        int timeOffset = earliest ? 14 : 21;
        Calendar today = Calendar.getInstance(timeZone);
        Calendar start = Calendar.getInstance(timeZone);
        start.setTime(startDate);
        start.set(Calendar.HOUR_OF_DAY, 0);
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);
        if (start.after(today)) {
            start.set(Calendar.HOUR_OF_DAY, timeOffset);
        } else {
            if (today.get(Calendar.HOUR_OF_DAY) >= timeOffset) {
                // 若当前时间已超过timeOffset点,下的是今日出游的,最早到店时间加30分钟
                start.set(Calendar.HOUR_OF_DAY, today.get(Calendar.HOUR_OF_DAY));
                start.set(Calendar.MINUTE, 30);
            } else {
                // 若当前时间在timeOffset点前的,下的是今日出游的,最早到店时间加30分钟
                start.set(Calendar.HOUR_OF_DAY, timeOffset);
            }
        }
        return start.getTime();
    }
    /**
     * 传入时间是否超过当前时间指定的差值
     * @param date
     * @param diff
     * @return
     */
    public static boolean isDateThanNowDateOverDiff(long date, Integer diff){
        long nm = 1000 * 60;
        int minNumber = (int)((System.currentTimeMillis() - date) / nm);
        return minNumber >= diff;
    }
    /**
     * 日期比大小
     * @param date1
     * @param date2
     * @return
     */
    public static int dateCompare(String date1,String date2){
        Date date_1 = parseDate(date1, yyyy_MM_dd_HH_mm_ss);
        Date date_2 = parseDate(date2, yyyy_MM_dd_HH_mm_ss);
        if(date_1.after(date_2)){
            return 1;
        }
        if(date_1.before(date_2)){
            return -1;
        }
        return 0;
    }
    /**
     * 根据日期时间字符串获取日期时间
     * @param datetime
     * @param format 为null或者空时默认为yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static LocalDateTime stringToDateTime( String datetime, String format) {
        if (StringUtils.isEmpty(format)) {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(datetime,formatter);
    }
    public static LocalDateTime parseStringToDateTime(String times) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ldt = LocalDateTime.parse(times,df);
        return ldt;
    }
    /**
     *
     * (方法说明描述) 当前时间是几点
     *
     * @return
     */
    public static int getHourOfDay() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        return hour;
    }
    /**
     * 计算俩时间相差分钟数
     * @param endDate 结束时间
     * @param startDate 开始时间
     * @return
     */
    public static int getDiffMinutes(Date endDate, Date startDate) {
        return (int)((endDate.getTime() - startDate.getTime()) / (1000 * 60));
    }
    /**
     * 计算俩时间相差秒数
     * @param endDate 结束时间
     * @param startDate 开始时间
     * @return
     */
    public static int getDiffSeconds(Date endDate, Date startDate) {
        return (int)((endDate.getTime() - startDate.getTime()) / 1000);
    }
}
相关文章
|
11天前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
|
2月前
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
592 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
2月前
|
JSON 前端开发 Java
SpringBoot3怎么做统一结果封装?
在Spring Boot应用中,统一结果封装有助于团队协作,确保一致的API响应格式,提升代码质量和维护性。主要优点包括:简化前端集成工作,减少后端重复编码,以及增强接口的可维护性。实现上,首先定义`Result`类来封装响应状态码、消息、数据及时间戳;其次,通过`ResultCode`枚举类标准化状态信息。示例代码展示了如何构建这些类,并通过一个简单的控制器方法演示了如何使用它们返回JSON格式的响应结果。
|
3月前
|
XML Java API
springboot基础及上传组件封装
springboot基础及上传组件封装
17 0
|
3月前
|
JSON Java fastjson
Spring Boot返回Json数据及数据封装
本文详细介绍了如何在Spring Boot项目中处理JSON数据的传输 Spring Boot默认使用Jackson作为JSON处理器,并通过`spring-boot-starter-web`依赖自动包含相关组件。文章还展示了如何配置Jackson处理null值,使其转换为空字符串。此外,文章比较了Jackson和FastJson的特点,并提供了FastJson的配置示例,展示了如何处理null值以适应不同应用场景。
|
4月前
|
Java
springboot封装RedisTemplate
springboot封装RedisTemplate
|
4月前
|
搜索推荐 前端开发 JavaScript
SpringBoot静态资源访问控制和封装集成方案
该文档描述了对基于SpringBoot的项目框架进行优化和整合的过程。原先采用前后端分离,后端兼做前端,但随着项目增多,升级维护变得复杂。因此,决定整合后台管理页面与后端代码,统一发布。设计上,框架包含后台管理资源,项目则配置具体业务页面,项目可通过覆盖框架资源实现个性化。关键步骤包括:自定义静态资源访问路径、解决图标与字体文件访问问题、设定自定义欢迎页面和页面图标,以及确保项目能正确访问框架静态资源。通过扫描jar包、解压和拷贝资源到项目目录,实现了框架静态资源的动态加载。此外,调整静态资源访问优先级,保证正确加载。最终实现支持jar和war包的项目结构优化。
103 4
|
4月前
|
运维 监控 Java
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
|
5月前
|
JSON 前端开发 Java
Springboot前后端分离项目统一封装返回结果
Springboot前后端分离项目统一封装返回结果
|
5月前
|
缓存 NoSQL Java
springboot中集成redis,二次封装成工具类
springboot中集成redis,二次封装成工具类