详解Java中日期工具类的操作

 更新时间:2022年11月18日 09:43:55   作者:共饮一杯无  
这篇文章主要为大家详细介绍了Java中日期工具类的常见操作,如:字符串和Date互转、字符串和LocalDate互转等,感兴趣的小伙伴可以学习一下

避免重复造轮子,相关方法基于hutool日期时间工具封装并做部分增强。需要先引入如下坐标

          <dependency>
              <groupId>cn.hutool</groupId>
              <artifactId>hutool-all</artifactId>
              <version>${hutool.version}</version>
          </dependency>

字符串转Date

    //字符串转Date
    Date dateTime = DateUtil.parseDate("2022-04-06");
    System.out.println(dateTime);

Date转字符串

//Date转字符串不指定format格式,默认yyyy-MM-dd HH:mm:ss
String dateStr = DateUtil.date2Str(new Date());
System.out.println(dateStr);
//Date转字符串指定格式
String dateStr2 = DateUtil.date2Str("yyyy/MM/dd",new Date());
System.out.println(dateStr2);

字符串转LocalDate

//字符串转LocalDate
LocalDate localDate = DateUtil.parseLocalDate("2022-04-06");
System.out.println(localDate);

Date转LocalDate

//Date转LocalDate
LocalDate localDate = DateUtil.date2LocalDate(new Date());
System.out.println(localDate);

LocalDate转字符串

//LocalDate转Str
String localDateStr = DateUtil.localDate2Str(LocalDate.now());
System.out.println(localDateStr);

两个日期的时间差

String beginDateStr = "2022-02-01 22:33:23";
Date beginDate = DateUtil.parse(beginDateStr);

String endDateStr = "2022-03-10 23:33:23";
Date endDate = DateUtil.parse(endDateStr);
//相差天数(37)
long betweenDay = DateUtil.between(beginDate, endDate, DateUnit.DAY);
System.out.println(betweenDay);
//格式化时间差(37天1小时)
String formatBetween = DateUtil.formatBetween(beginDate, endDate, BetweenFormater.Level.HOUR);
System.out.println(formatBetween);

一天的开始和结束时间

String dateStr = "2022-04-07 10:33:23";
Date date = DateUtil.parse(dateStr);

//一天的开始时间:2022-04-07 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);
System.out.println(beginOfDay);

//一天的结束时间:2022-04-07 23:59:59
Date endOfDay = DateUtil.endOfDay(date);
System.out.println(endOfDay);

工具类如下

/**
 * <p>基于hutool的日期工具类增强</p>
 *
 * @author zjq
 * @date 2021/04/07
 */
public class DateUtil extends cn.hutool.core.date.DateUtil {

    private static final String[] PARSE_PATTERNS = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

    public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 字符串转date类型
     *
     * @param dateStr
     * @return
     */
    public static Date parseDate(Object dateStr) {
        if (ObjectUtils.isNull(dateStr)) {
            return null;
        }
        if (dateStr instanceof Double) {
            return org.apache.poi.ss.usermodel.DateUtil.getJavaDate((Double) dateStr);
        }
        return parse(dateStr.toString(), PARSE_PATTERNS);
    }

    /**
     * Date类型转字符串
     *
     * @param date
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String date2Str(Date date) {
        return date2Str(null, date);
    }

    /**
     * Date类型转字符串
     *
     * @param format
     * @param date
     * @return
     */
    public static String date2Str(String format, Date date) {
        if (ObjectUtils.isNull(date)) {
            return null;
        }
        SimpleDateFormat dateFormat = StrUtil.isNotBlank(format) ?new SimpleDateFormat(format):
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(date);
    }

    /**
     * 字符串转LocalTime类型
     *
     * @param dateStr
     * @return
     */
    public static LocalTime parseLocalTime(Object dateStr) {
        if (ObjectUtils.isNull(dateStr)) {
            return null;
        }
        if (dateStr instanceof Double) {
            return date2LocalTime(parseDate(dateStr));
        }
        return LocalTime.parse(dateStr.toString(), TIME_FORMATTER);
    }

    /**
     * Date转LocalTime
     *
     * @param date
     * @return
     */
    public static LocalTime date2LocalTime(Date date) {
        if (null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
    }

    /**
     * LocalTime转Str
     *
     * @param localTime
     * @return HH:mm:ss
     */
    public static String localTime2Str(LocalTime localTime) {
        return localTime2Str(null, localTime);
    }

    /**
     * LocalTime转str
     *
     * @param format    格式
     * @param localTime
     * @return
     */
    public static String localTime2Str(String format, LocalTime localTime) {
        if (null == localTime) {
            return null;
        }
        DateTimeFormatter formatter = StrUtil.isBlank(format) ?
                TIME_FORMATTER : DateTimeFormatter.ofPattern(format);
        return localTime.format(formatter);
    }

    /**
     * 字符串转LocalDate类型
     *
     * @param dateStr
     * @return
     */
    public static LocalDate parseLocalDate(Object dateStr) {
        if (ObjectUtils.isNull(dateStr)) {
            return null;
        }
        if (dateStr instanceof Double) {
            return date2LocalDate(parseDate(dateStr));
        }
        return LocalDate.parse(dateStr.toString(), DATE_FORMATTER);
    }

    /**
     * Date转LocalDate
     *
     * @param date
     * @return
     */
    public static LocalDate date2LocalDate(Date date) {
        if (null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }

    /**
     * LocalDate转Str
     *
     * @param localDate
     * @return
     */
    public static String localDate2Str(LocalDate localDate) {
        return localDate2Str(null, localDate);
    }

    /**
     * LocalDate转Str
     *
     * @param format    格式
     * @param localDate
     * @return
     */
    public static String localDate2Str(String format, LocalDate localDate) {
        if (null == localDate) {
            return null;
        }
        DateTimeFormatter formatter = StrUtil.isBlank(format) ?
                DATE_FORMATTER : DateTimeFormatter.ofPattern(format);
        return localDate.format(formatter);
    }

    /**
     * 字符串转LocalDateTime类型
     *
     * @param dateStr
     * @return
     */
    public static LocalDateTime parseLocalDateTime(Object dateStr) {
        if (ObjectUtils.isNull(dateStr)) {
            return null;
        }
        if (dateStr instanceof Double) {
            return date2LocalDateTime(parseDate(dateStr));
        }
        return LocalDateTime.parse(dateStr.toString(), DATETIME_FORMATTER);
    }

    /**
     * Date转LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime date2LocalDateTime(Date date) {
        if (null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    }

    /**
     * LocalDate转Str
     *
     * @param localDateTime
     * @return
     */
    public static String localDateTime2Str(LocalDateTime localDateTime) {
        return localDateTime2Str(null, localDateTime);
    }

    /**
     * LocalDate转Str
     *
     * @param format
     * @param localDateTime
     * @return
     */
    public static String localDateTime2Str(String format, LocalDateTime localDateTime) {
        if (null == localDateTime) {
            return null;
        }
        DateTimeFormatter formatter = StrUtil.isBlank(format) ?
                DATETIME_FORMATTER : DateTimeFormatter.ofPattern(format);
        return localDateTime.format(formatter);
    }
}

到此这篇关于详解Java中日期工具类的操作的文章就介绍到这了,更多相关Java日期工具类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中replace、replaceAll和replaceFirst函数的用法小结

    Java中replace、replaceAll和replaceFirst函数的用法小结

    相信会java的同学估计都用过replace、replaceAll、replaceFirst这三个函数,可是,我们真的懂他们吗?下面通过这篇文章大家再来好好学习学习下这几个函数。
    2016-09-09
  • 最长公共子序列问题的深度分析与Java实现方式

    最长公共子序列问题的深度分析与Java实现方式

    本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,动态规划解法通过构建DP表,显著提高了计算效率,适用于大规模数据处理
    2025-02-02
  • java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    这篇文章主要介绍了java 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring 整合多个配置文件的方法

    Spring 整合多个配置文件的方法

    在一些大型应用中,可能存在多个配置文件,这篇文章给大家介绍了Spring 整合多个配置文件的方法,非常不错,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2018-05-05
  • Java利用for循环输出空心三角形、空心菱形和空心矩形的代码

    Java利用for循环输出空心三角形、空心菱形和空心矩形的代码

    今天小编就为大家分享一篇关于Java利用for循环输出空心三角形、空心菱形和空心矩形的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java实现的决策树算法完整实例

    Java实现的决策树算法完整实例

    这篇文章主要介绍了Java实现的决策树算法,简单描述了决策树的概念、原理,并结合完整实例形式分析了java实现决策树算法的相关操作技巧,代码中备有较为详尽的注释便于理解,需要的朋友可以参考下
    2017-11-11
  • Java中Dijkstra算法求解最短路径的实现

    Java中Dijkstra算法求解最短路径的实现

    Dijkstra算法是一种解决最短路径问题的常用算法,本文主要介绍了Java中Dijkstra算法求解最短路径的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • SpringBoot中@Configuration和@Bean和@Component相同点详解

    SpringBoot中@Configuration和@Bean和@Component相同点详解

    这篇文章主要介绍了SpringBoot中@Configuration和@Bean和@Component相同点详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java function函数式接口的使用方法与实例

    Java function函数式接口的使用方法与实例

    这篇文章主要介绍了Java function函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感与艺术的抽象融为一体,悄然重构了开发者对代码之美的认知,需要的朋友可以参考下
    2025-02-02
  • 详解spring-data-jpa中jpql的投影查询

    详解spring-data-jpa中jpql的投影查询

    投影查询,就是仅仅检索表的部分字段。而不是粗暴的 SELECT * FROM...检索出所有列数据,这篇文章主要介绍了spring-data-jpa中jpql的投影查询,需要的朋友可以参考下
    2021-09-09

最新评论