4hutool实战:DateUtil-格式化时间

本文详细介绍了Hutool核心库中DateUtil类的日期和时间处理功能,涵盖LocalDateTime格式化、不同格式转换、日期时间组件分离及JSR-310 API应用。从源码剖析到实战案例,助你轻松掌握时间处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯

hutool实战(带你掌握里面的各种工具)目录

万字博文教你搞懂java源码的日期和时间相关用法

java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案(万字长文*建议收藏)

要探索JDK的核心底层源码,那必须掌握native用法

源码分析:JDK获取默认时区的风险和最佳实践

java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)

java8 新日期时间API((二)JSR-310:常用的日期时间API)

java8 新日期时间API((三)JSR-310:格式化和解析)

java8 新日期时间API((四)JSR-310:常用计算工具)

java8 新日期时间API((五)JSR-310:实战+源码分析)

时区的规则发生变化时,如何同步JDK的时区规则

JSR-310判断是否闰年实现,发现原作者的代码可能有问题

hutool日期时间系列文章

1DateUtil(时间工具类)-当前时间和当前时间戳

2DateUtil(时间工具类)-常用的时间类型Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)转换

3DateUtil(时间工具类)-获取日期的各种内容

4DateUtil(时间工具类)-格式化时间

5DateUtil(时间工具类)-解析被格式化的时间

6DateUtil(时间工具类)-时间偏移量获取

7DateUtil(时间工具类)-日期计算

8ChineseDate(农历日期工具类)

9LocalDateTimeUtil(JDK8+中的{@link LocalDateTime} 工具类封装)

10TemporalAccessorUtil{@link TemporalAccessor} 工具类封装


用途:格式化时间

使用场景

把日期按照不同的需求格式化成对应的日期字符串

项目引用

此博文的依据:hutool-5.6.5版本源码

        <dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-core</artifactId>
			<version>5.6.5</version>
		</dependency>

方法摘要

方法描述
cn.hutool.core.date.DateUtil.formatLocalDateTime(java.time.LocalDateTime)
格式化日期时间<br> 格式 yyyy-MM-dd HH:mm:ss
cn.hutool.core.date.DateUtil.format(java.time.LocalDateTime, java.lang.String)
根据特定格式格式化日期
cn.hutool.core.date.DateUtil.format(java.util.Date, java.lang.String)
根据特定格式格式化日期
cn.hutool.core.date.DateUtil.format(java.util.Date, cn.hutool.core.date.format.DatePrinter)
根据特定格式格式化日期
cn.hutool.core.date.DateUtil.format(java.util.Date, java.text.DateFormat)
根据特定格式格式化日期
cn.hutool.core.date.DateUtil.format(java.util.Date, java.time.format.DateTimeFormatter)
根据特定格式格式化日期
cn.hutool.core.date.DateUtil.formatDateTime(java.util.Date)
格式化日期时间<br> 格式 yyyy-MM-dd HH:mm:ss
cn.hutool.core.date.DateUtil.formatDate(java.util.Date)
格式化日期部分(不包括时间)<br> 格式 yyyy-MM-dd
cn.hutool.core.date.DateUtil.formatTime(java.util.Date)
格式化时间<br> 格式 HH:mm:ss
cn.hutool.core.date.DateUtil.formatHttpDate(java.util.Date)
格式化为Http的标准日期格式<br> 标准日期格式遵循RFC 1123规范,格式类似于:Fri, 31 Dec 1999 23:59:59 GMT
cn.hutool.core.date.DateUtil.formatChineseDate(java.util.Date, boolean, boolean)
格式化为中文日期格式,如果isUppercase为false,则返回类似:2018年10月24日,否则返回二〇一八年十月二十四日

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatLocalDateTime(java.time.LocalDateTime)

方法描述

格式化日期时间<br>
格式 yyyy-MM-dd HH:mm:ss

支持版本及以上

参数描述:

参数名描述
LocalDateTime localDateTime
localDateTime 被格式化的日期

返回值:

格式化后的字符串

参考案例:

        String strDate = "2019-12-01 17:02:30";
		LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate);
		String strDate1 = DateUtil.formatLocalDateTime(ldt);
		Assert.assertEquals(strDate, strDate1);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.format(java.time.LocalDateTime, java.lang.String)

方法描述

根据特定格式格式化日期

支持版本及以上

参数描述:

参数名描述
LocalDateTime localDateTime
localDateTime 被格式化的日期
String format
format 日期格式,常用格式见: {@link DatePattern}

返回值:

格式化后的字符串

参考案例:


		String strDate2 = "2019-12-01 17:02:30.111";
		ldt = DateUtil.parseLocalDateTime(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN);
		strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN);
		Assert.assertEquals(strDate, strDate1);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.format(java.util.Date, java.lang.String)

方法描述

根据特定格式格式化日期

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期
String format
format 日期格式,常用格式见: {@link DatePattern}

返回值:

格式化后的字符串

参考案例:

		String strDate = "2021-05-16";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date localDate = sdf.parse(strDate);
		Assert.assertEquals(strDate, DateUtil.format(localDate, DatePattern.NORM_DATE_PATTERN));
	

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.format(java.util.Date, cn.hutool.core.date.format.DatePrinter)

方法描述

根据特定格式格式化日期

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期
DatePrinter format
format {@link DatePrinter} 或 {@link FastDateFormat}

返回值:

格式化后的字符串

参考案例:

		//根据特定格式格式化日期
		String str = "2021-05-16";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
		Date date = DateUtil.parse(str);
		String dateStr = DateUtil.format(date,sdf);
		System.out.println(dateStr);
		Assert.assertEquals(str, dateStr);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.format(java.util.Date, java.text.DateFormat)

方法描述

根据特定格式格式化日期

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期
DateFormat format
format {@link SimpleDateFormat}

返回值:

格式化后的字符串

参考案例:

待补充

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.format(java.util.Date, java.time.format.DateTimeFormatter)

方法描述

根据特定格式格式化日期

支持版本及以上

5.0.0

参数描述:

参数名描述
Date date
date 被格式化的日期
DateTimeFormatter format
format {@link SimpleDateFormat}

返回值:

格式化后的字符串

参考案例:

		//根据特定格式格式化日期
		String str = "2021-05-16";
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.US);
		Date date = DateUtil.parse(str);
		String dateStr = DateUtil.format(date,dtf);
		System.out.println(dateStr);
		Assert.assertEquals(str, dateStr);
		// 此方法有问题,官方已处理 处理版本是5.7.5 修复 
		java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatDateTime(java.util.Date)

方法描述

格式化日期时间<br>
格式 yyyy-MM-dd HH:mm:ss

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期

返回值:

格式化后的日期

参考案例:

		String dateStr = "2017-03-01";
		Date date = DateUtil.parse(dateStr);

		String format = DateUtil.format(date, "yyyy/MM/dd");
		Assert.assertEquals("2017/03/01", format);

		// 常用格式的格式化
		String formatDate = DateUtil.formatDate(date);
		Assert.assertEquals("2017-03-01", formatDate);
		String formatDateTime = DateUtil.formatDateTime(date);
		Assert.assertEquals("2017-03-01 00:00:00", formatDateTime);
		String formatTime = DateUtil.formatTime(date);
		Assert.assertEquals("00:00:00", formatTime);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatDate(java.util.Date)

方法描述

格式化日期部分(不包括时间)<br>
格式 yyyy-MM-dd

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期

返回值:

格式化后的字符串

参考案例:

		String dateStr = "2017-03-01";
		Date date = DateUtil.parse(dateStr);

		String format = DateUtil.format(date, "yyyy/MM/dd");
		Assert.assertEquals("2017/03/01", format);

		// 常用格式的格式化
		String formatDate = DateUtil.formatDate(date);
		Assert.assertEquals("2017-03-01", formatDate);
		String formatDateTime = DateUtil.formatDateTime(date);
		Assert.assertEquals("2017-03-01 00:00:00", formatDateTime);
		String formatTime = DateUtil.formatTime(date);
		Assert.assertEquals("00:00:00", formatTime);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatTime(java.util.Date)

方法描述

格式化时间<br>
格式 HH:mm:ss

支持版本及以上

3.0.1

参数描述:

参数名描述
Date date
date 被格式化的日期

返回值:

格式化后的字符串

参考案例:

		String dateStr = "2017-03-01";
		Date date = DateUtil.parse(dateStr);

		String format = DateUtil.format(date, "yyyy/MM/dd");
		Assert.assertEquals("2017/03/01", format);

		// 常用格式的格式化
		String formatDate = DateUtil.formatDate(date);
		Assert.assertEquals("2017-03-01", formatDate);
		String formatDateTime = DateUtil.formatDateTime(date);
		Assert.assertEquals("2017-03-01 00:00:00", formatDateTime);
		String formatTime = DateUtil.formatTime(date);
		Assert.assertEquals("00:00:00", formatTime);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatHttpDate(java.util.Date)

方法描述

格式化为Http的标准日期格式<br>
标准日期格式遵循RFC 1123规范,格式类似于:Fri, 31 Dec 1999 23:59:59 GMT

支持版本及以上

参数描述:

参数名描述
Date date
date 被格式化的日期

返回值:

HTTP标准形式日期字符串

参考案例:

        String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
		Assert.assertEquals("Wed, 02 Jan 2019 14:32:01 GMT", formatHttpDate);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

方法明细

方法名称:cn.hutool.core.date.DateUtil.formatChineseDate(java.util.Date, boolean, boolean)

方法描述

格式化为中文日期格式,如果isUppercase为false,则返回类似:2018年10月24日,否则返回二〇一八年十月二十四日

支持版本及以上

5.3.9

参数描述:

参数名描述
Date date
date 被格式化的日期
boolean isUppercase
isUppercase 是否采用大写形式
boolean withTime
withTime 是否包含时间部分

返回值:

中文日期字符串

参考案例:

        String formatChineseDate = DateUtil.formatChineseDate(DateUtil.parse("2018-02-24"), true, false);
		Assert.assertEquals("二〇一八年二月二十四日", formatChineseDate);

源码解析:

4hutool源码分析:DateUtil(时间工具类)-格式化时间(万字长文源码分析,学大佬如何写代码)

<think>好的,我需要帮用户解决关于Java Hutool库的使用教程和常见问题。首先,用户可能刚接触Hutool,需要基础介绍和安装步骤。根据引用[2],Hutool是一个基础工具类库,封装了文件、流、加密解密等功能,所以应该先介绍这些核心模块。 接下来,安装部分。引用[2]提到1.4安装,可能需要指导用户如何添加Maven依赖,或者手动下载jar包。需要确保语法正确,比如Maven的dependency代码块。 然后,使用教程部分需要分模块讲解。比如文件操作、加密解密、HTTP工具等,每个部分给出代码示例。例如,FileUtil的使用,加密中的SecureUtil,HTTP请求的HttpUtil。要注意代码示例的正确性,并符合用户的实际应用场景。 常见问题方面,用户可能会遇到依赖冲突、API变化、异常处理等问题。需要根据经验或文档提供解决方法,比如检查依赖树、查阅官方文档、异常捕获处理等。此外,引用[3]提到流式输出的设置,虽然和Hutool无关,但可能在HTTP工具部分涉及流处理,可以适当关联。 最后,推荐资源部分,引用[1]提到B站的高淇教程,但用户问的是Hutool,所以需要调整,建议官方文档和社区论坛。同时,引用[3]的API接入可能和Hutool的HTTP工具结合使用,可以举例说明如何集成第三方API。 需要检查所有LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但问题中可能涉及较少数学公式,主要集中在代码示例。确保回答结构清晰,分点讲解,代码用代码块标注,语言设为Java。最后生成相关问题,帮助用户进一步学习。</think>### Java Hutool库使用教程与常见问题解决 Hutool是一个Java基础工具库,封装了文件操作、加密解密、HTTP请求等常用功能模块,能显著提升开发效率[^2]。以下从基础使用到常见问题进行全面解析。 --- #### 一、Hutool核心功能与安装 1. **核心模块** - 文件操作:$FileUtil$ 实现快速读写 - 加密工具:$SecureUtil$ 支持MD5/AES等算法 - HTTP工具:$HttpUtil$ 发送GET/POST请求 - 日期处理:$DateUtil$ 格式化与计算时间差 2. **安装步骤** ```xml <!-- Maven依赖 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.20</version> </dependency> ``` --- #### 二、Hutool典型使用场景 1. **文件操作示例** ```java // 读取文件内容 String content = FileUtil.readUtf8String("test.txt"); // 写入文件 FileUtil.writeString(content, "output.txt", CharsetUtil.CHARSET_UTF_8); ``` 2. **加密解密应用** ```java // MD5加密 String md5 = SecureUtil.md5("password"); // AES加密 AES aes = SecureUtil.aes("密钥".getBytes()); String encrypted = aes.encryptHex("明文"); ``` 3. **HTTP请求处理** ```java // GET请求 String response = HttpUtil.get("https://api.example.com/data"); // POST表单提交 HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("name", "Hutool"); String result = HttpUtil.post("https://api.example.com/submit", paramMap); ``` --- #### 三、常见问题与解决方法 1. **依赖冲突** - 现象:出现$NoSuchMethodError$或$ClassNotFoundException$ - 解决:通过`mvn dependency:tree`检查依赖树,排除冲突的jar包版本 2. **API变化导致报错** ```java // Hutool 5.x版本弃用旧方法 // 错误写法:DateUtil.formatDateTime(new Date()); // 正确写法:DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); ``` 3. **文件操作权限问题** ```java try { FileUtil.touch("/system/file.txt"); // 需要系统权限 } catch (IORuntimeException e) { System.err.println("权限不足: " + e.getMessage()); } ``` --- #### 四、推荐学习资源 1. **官方文档**:Hutool官网提供完整API文档和示例代码 2. **实战项目**:结合引用[3]中提到的API接入场景,可用$HttpUtil$实现与DeepSeek等第三方服务的集成[^3] 3. **社区论坛**:GitHub Issues区和Gitee社区有大量问题讨论 ---
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小虚竹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值