Hutool 笔记 日期工具类的使用

本文详细介绍了Hutool库中的日期时间工具,如DateUtil提供的日期转换、格式化、DateTime类的增强功能,以及TimeInterval用于计时的特性。展示了如何使用这些工具进行日期处理和性能测量。

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

日期时间工具

介绍

日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象。

日期时间工具

  • DateUtil 针对日期时间操作提供一系列静态方法
  • DateTime 提供类似于Joda-Time中日期时间对象的封装,继承自Date类,并提供更加丰富的对象方法。
  • FastDateFormat 提供线程安全的针对Date对象的格式化和日期字符串解析支持。此对象在实际使用中并不需要感知,相关操作已经封装在DateUtil和DateTime的相关方法中。
  • DateBetween 计算两个时间间隔的类,除了通过构造新对象使用外,相关操作也已封装在DateUtil和DateTime的相关方法中。
  • TimeInterval 一个简单的计时器类,常用于计算某段代码的执行时间,提供包括毫秒、秒、分、时、天、周等各种单位的花费时长计算,对象的静态构造已封装在DateUtil中。
  • DatePattern 提供常用的日期格式化模式,包括String类型和FastDateFormat两种类型。

日期时间工具-DateUtil

考虑到Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位。

对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd HH:mm:ss形式的字符串,方便在输出时的调用(例如日志记录等),提供了众多便捷的方法对日期对象操作。

与java原有日期类型之间的转换

Date、long、Calendar之间的相互转换

        //当前时间
        Date date = DateUtil.date();
        System.out.println(date);
//当前时间
        Date date2 = DateUtil.date(Calendar.getInstance());
        System.out.println(date2);
//当前时间
        Date date3 = DateUtil.date(System.currentTimeMillis());
        System.out.println(date3);
//当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
        String now = DateUtil.now();
        System.out.println(now);
//当前日期字符串,格式:yyyy-MM-dd
        String today= DateUtil.today();
        System.out.println(today);

字符串转日期和格式化输出

DateUtil.parse方法会自动识别一些常用格式,包括:

  • yyyy-MM-dd HH:mm:ss
  • yyyy/MM/dd HH:mm:ss
  • yyyy.MM.dd HH:mm:ss
  • yyyy年MM月dd日 HH时mm分ss秒
  • yyyy-MM-dd
  • yyyy/MM/dd
  • yyyy.MM.dd
  • HH:mm:ss
  • HH时mm分ss秒
  • yyyy-MM-dd HH:mm
  • yyyy-MM-dd HH:mm:ss.SSS
  • yyyyMMddHHmmss
  • yyyyMMddHHmmssSSS
  • yyyyMMdd
  • EEE, dd MMM yyyy HH:mm:ss z
  • EEE MMM dd HH:mm:ss zzz yyyy
  • yyyy-MM-dd’T’HH:mm:ss’Z’
  • yyyy-MM-dd’T’HH:mm:ss.SSS’Z’
  • yyyy-MM-dd’T’HH:mm:ssZ
  • yyyy-MM-dd’T’HH:mm:ss.SSSZ
  • String dateStr = “2017-03-01”;
  • Date date = DateUtil.parse(dateStr);
    我们也可以使用自定义日期格式转化,
    DateUtil.format可以设置0日期格式化,支持以上的格式,
        String s1="2001-08-22 12:21:21";
        DateTime s2 = DateUtil.parse(s1);
        // 输出2001-08-22 12:21:21
        System.out.println(s2);
        String dateStr = "2017-03-01";
        Date date = DateUtil.parse(dateStr);
        //设置自定义解析字符串格式化转换
        String format = DateUtil.format(date, "yyyy/MM/dd");
        //结果 2017/03/01
        System.out.println(format);


        //设置自定义解析字符串格式化转换
        String formatDateTime = DateUtil.formatDateTime(date);
        //结果:2017-03-01 00:00:00
        System.out.println(formatDateTime);
        String formatTime = DateUtil.formatTime(date);
        //结果:00:00:00
        System.out.println(formatTime);

其他功能

DateUtil还有其他几个不常用的功能,包括获取部分日期日期枚举日期偏移,计算时差星座和属相

    // 获取部分日期

        // 获取当前日期
        Date date=DateUtil.date();

        //获得年的部分
        System.out.println(DateUtil.year(date));
        //获得月份,从0开始计数
        System.out.println(DateUtil.month(date));
        //获得月份枚举,用英文表示
        System.out.println(DateUtil.monthEnum(date));


        //日期偏移
        //获取今天开始
        System.out.println(DateUtil.beginOfDay(date));
        //获取今天结束
        System.out.println(DateUtil.endOfDay(date));
        // 向后偏移七天
        System.out.println(DateUtil.offset(date, DateField.DAY_OF_WEEK,7));
        //由于上面的api还是过于繁琐,DateUtil还提供了一些更简化方法
        //昨天
        System.out.println(DateUtil.yesterday());
        //明天
        System.out.println(DateUtil.tomorrow());
        //偏移三天
        System.out.println(DateUtil.offsetDay(date,3));

        // 计算时间差
        String dateStr2 = "2017-04-01 23:33:23";
        Date date2 = DateUtil.parse(dateStr2);
        // 计算时间差,并指定以天为单位
        System.out.println(DateUtil.between(date,date2, DateUnit.DAY));
        //格式化输出时间差
        System.out.println(DateUtil.formatBetween(date,date2, BetweenFormatter.Level.DAY));

        //星座和属相
        // "摩羯座"
        String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);
        // "狗"
        String chineseZodiac = DateUtil.getChineseZodiac(1994);
        //计算年龄
        DateUtil.ageOfNow("1990-01-30");
        //判断是否为闰年
        DateUtil.isLeapYear(2017);

DateTime

hutool中的DateTime类继承于java.util.Date类,为Date类扩展了众多简便方法,这些方法多是DateUtil静态方法的对象表现形式,使用DateTime对象可以完全替代开发中Date对象的使用。

新建对象

DateTime提供了多种参数构造

  • Date
  • Calendar
  • String(日期字符串,第二个参数是日期格式)
  • long 毫秒数

构建对象有两种方式:DateTime.of()和new DateTime():

Date date = new Date();
        
//new方式创建
DateTime time = new DateTime(date);
Console.log(time);

//of方式创建
DateTime now = DateTime.now();
DateTime dt = DateTime.of(date);

使用对象

DateTime的成员方法与DateUtil中的静态方法所对应,因为是成员方法,因此可以使用更少的参数操作日期时间。因为在上文已经进行较为完备的介绍,以根据上文的介绍自行使用。

TimeInterval

Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。TimeInterval支持分组计时,方便对比时间。

TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------

timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数

// 也可以实现分组计时

final TimeInterval timer = new TimeInterval();

// 分组1
timer.start("1");
ThreadUtil.sleep(800);

// 分组2
timer.start("2");
ThreadUtil.sleep(900);

Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));
<think>好的,我需要回答用户关于Hutool库中HttpUtil工具类的用法和功能介绍。首先,我需要整理用户提供的参考资料,并确保回答符合系统级指令的要求,比如正确使用LaTeX格式和引用标识。 用户提到了四个引用内容,都是关于Hutool的HttpUtil工具类的使用方法和功能。首先,我应该从HttpUtil的基本功能开始介绍,比如发送HTTP请求、处理响应等。然后,可能需要分点说明常用方法,比如GET、POST请求,文件上传下载,以及如何处理HTTPS请求。同时,需要确保每个引用的内容在回答中被正确引用,比如引用[^1]、[^2]等。 接下来,我需要检查是否有遗漏的重要功能,比如工具类的设计目的,是否支持同步或异步请求,是否有连接池管理等。根据引用内容,HttpUtil主要应对简单场景,可能不涉及复杂配置,但用户可能想知道更多高级用法或优化方法。 另外,用户可能希望看到代码示例,比如如何使用HttpUtil发送GET或POST请求,如何处理响应数据,可能还需要提到依赖配置,如Maven的引入方式,这在引用[^4]中有提到版本4.1.0,但需要注意是否需要更新到最新版本。 同时,需要确保回答结构清晰,分点说明,可能包括基本介绍、核心功能、使用示例、注意事项等部分。每个部分末尾需要自然地添加引用标识,例如在提到HttpUtil封装HttpRequest时引用[^3],在介绍HTTPS使用时引用[^4]。 可能还需要注意用户提到的“防坑”点,比如在引用中提到的使用HttpUtil时的注意事项,需要指出常见问题,如连接超时设置、异常处理等,帮助用户避免常见错误。 最后,生成相关问题时要围绕HttpUtil的功能扩展,比如如何设置超时时间、如何处理JSON响应、文件下载的断点续传是否支持等。确保问题与主题相关,并引导用户进一步探索。 现在需要将这些思考整理成一个结构化的回答,符合用户要求的格式,使用中文,正确引用,并生成相关问题。确保所有数学公式或代码示例使用正确的格式,比如行内公式用$...$,独立公式用$$...$$,尽管在这个问题中可能主要涉及代码块,但需要保持语法正确。</think>### Hutool HttpUtil 工具类使用详解 #### 1. 工具类简介 Hutool 的 `HttpUtil` 是一个简化 HTTP 请求的工具类,封装了常见的 GET、POST 等请求方法,支持同步调用和文件上传/下载功能[^3]。其设计目标是**简化代码量**,例如通过一行代码完成请求发送与响应解析。 #### 2. 核心功能 1. **基本请求方法** - **GET 请求**:`String result = HttpUtil.get(url, paramMap);` 支持参数自动拼接,例如:`HttpUtil.get("https://example.com", MapUtil.of("key", "value"))`。 - **POST 请求**: ```java String result = HttpUtil.post(url, "{\"name\":\"test\"}", ContentType.JSON.toString()); ``` 支持表单、JSON 等多种数据格式。 2. **文件操作** - **下载文件**: ```java long size = HttpUtil.downloadFile("https://example.com/file.zip", FileUtil.file("download/")); ``` 自动处理文件流和存储路径。 - **上传文件**: 使用 `HttpRequest` 封装多部分表单: ```java HttpUtil.createPost(url) .form("file", FileUtil.file("test.txt")) .execute(); ``` 3. **HTTPS 支持** 默认跳过证书验证(仅限测试环境),通过 `SSLSocketFactory` 可配置自定义证书[^4]。 4. **响应处理** 直接获取字符串、字节数组或解析 JSON: ```java JSONObject json = HttpUtil.createGet(url).execute().bodyToJson(); ``` #### 3. 依赖配置 Maven 引入(需确认版本更新): ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> </dependency> ``` > **注意**:版本过低可能导致功能缺失,建议使用最新稳定版[^4]。 #### 4. 性能优化建议 - **连接池管理**:通过 `HttpRequest.setConnectionTimeout(5000)` 设置超时时间[^1]。 - **异步请求**:结合线程池实现非阻塞调用,避免主线程阻塞。 #### 5. 典型问题与解决 - **乱码问题**:通过 `HttpRequest.setCharset(StandardCharsets.UTF_8)` 明确编码[^2]。 - **文件下载中断**:使用 `HttpUtil.downloadFile` 的断点续传参数(需 Hutool 5.8+)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

过去日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值