Hutool-Java工具库

日期时间

1、DateUtil

获取当前时间
java 复制代码
import cn.hutool.core.date.DateUtil;

import java.util.Calendar;
import java.util.Date;
java 复制代码
        //当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
        Date date = DateUtil.date();
        Date date2 = DateUtil.date(Calendar.getInstance());
        Date date3 = DateUtil.date(System.currentTimeMillis());
        String now = DateUtil.now();
        //当前日期字符串,格式:yyyy-MM-dd
        String today= DateUtil.today();
字符串转日期
java 复制代码
        String dateStr = "1956/09/12";
        /*
          传入一个字符串 返回 Date,默认格式为yyyy-MM-dd HH:mm:ss,且无法更改
          使用 DateUtil.parse(dateStr,"yyyy-MM-dd");类似这种方式也不行,会报错
         */
        Date date = DateUtil.parse(dateStr);
格式化日期
java 复制代码
        /*
            传入一个Date 返回 字符串,可以自定义日期格式
         */
        String format = DateUtil.format(date, "yyyy-MM-dd");
        /*
            传入一个Date 返回 字符串,常用格式的格式化:yyyy-MM-dd
         */
        String formatDate  = DateUtil.formatDate(date);
       /*
            传入一个Date 返回 字符串,常用格式的格式化:yyyy-MM-dd HH:mm:ss
         */
        String formatDateTime = DateUtil.formatDateTime(date);
        /*
            传入一个Date 返回 字符串,常用格式的格式化:HH:mm:ss
         */
        String formatTime = DateUtil.formatTime(date);
获取年月日
java 复制代码
        /*
            传入Date,获取年份
         */
        int year = DateUtil.year(date);
        /*
            传入Date,获取月份,从 0 开始计算的,需要 +1
         */
        int month = DateUtil.month(date);
        /*
            传入Date,获取日
         */
        int day = DateUtil.dayOfMonth(date);
        /*
            传入Date,获取月份枚举,月份对应的英文
         */
        Month monthEnum = DateUtil.monthEnum(date);
获取开始、结束
java 复制代码
        /*
            传入Date,获取某天的开始,默认格式:1956-09-12 00:00:00
         */
        Date beginOfDay = DateUtil.beginOfDay(date);
        /*
            传入Date,获取某天的结束,默认格式:1956-09-12 23:59:59
         */
        Date endOfDay = DateUtil.endOfDay(date);
        /*
            传入Date,获取某月的开始,默认格式:1956-09-01 00:00:00
         */
        Date beginOfMonth = DateUtil.beginOfMonth(date);
        /*
            传入Date,获取某月的结束,默认格式:1956-09-30 23:59:59
         */
        Date endOfMonth = DateUtil.endOfMonth(date);
        /*
            传入Date,获取某年的开始,默认格式:1956-01-01 00:00:00
         */
        DateTime beginOfYear = DateUtil.beginOfYear(date);
        /*
            传入Date,获取某月的结束,默认格式:1956-12-31 23:59:59
         */
        DateTime endOfYear = DateUtil.endOfYear(date);
日期时间偏移
java 复制代码
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;

偏移天、月、时

java 复制代码
        /*
            偏移几天,传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00
            正数为:往后偏移
            负数为:往前偏移
            为当月第一天或最后一天,自动偏移到上月或下月,偏移后到了上年或下年也一样
         */
        Date offset = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
        /*
            默认偏移"日",传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00
            正数为:往后偏移
            负数为:往前偏移
            为当月第一天或最后一天,自动偏移到上月或下月,偏移后到了上年或下年也一样
         */
        DateTime offsetDay = DateUtil.offsetDay(date, 2);
        /*
            默认偏移"月",传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 没有 HH:mm:ss 会默认 00:00:00
            正数为:往后偏移
            负数为:往前偏移
            为当年第一月或最后一月,自动偏移到上年或下年
         */
        DateTime offsetMonth = DateUtil.offsetMonth(date, 2);
        /*
            默认偏移"时",传入一个Date,输出格式:yyyy-MM-dd HH:mm:ss 
            正数为:往后偏移,没有 HH:mm:ss 会默认从后一天的 00:00:00 开始偏移
            负数为:往前偏移,没有 HH:mm:ss 会默认从前一天的 24:00:00 开始偏移
         */
        DateTime offsetHour = DateUtil.offsetHour(date, 2);

昨天、明天、往前七天、往后七天、往前一月、往后一月

java 复制代码
        /*
            昨天,返回昨天的当前时间,例如:
            今天为:1956-09-12 05:20:00
            返回结果为:1956-09-11 05:20:00
        */
        DateTime yesterday = DateUtil.yesterday();
        /*
            明天,返回明天的当前时间,例如:
            今天为:1956-09-12 05:20:00
            返回结果为:1956-09-13 05:20:00
        */
        DateTime tomorrow = DateUtil.tomorrow();
        /*
            上周,实际为:往前七天
         */
        DateTime lastWeek = DateUtil.lastWeek();
        /*
            下周,实际为:往后七天
         */
        DateTime nextWeek = DateUtil.nextWeek();
        /*
            上个月,实际为:上月的当前时间
            今天为:1956-09-12 05:20:00
            返回结果为:1956-08-12 05:20:00
         */
        DateTime lastMonth = DateUtil.lastMonth();
        /*
            下个月,实际为:下月的当前时间
            今天为:1956-09-12 05:20:00
            返回结果为:1956-10-12 05:20:00
         */
        DateTime nextMonth = DateUtil.nextMonth();
☆日期时间差

计算相差天数,返回 long

java 复制代码
        /*
            计算相差天数,传入两个Date,返回long,只比较 yyyy-MM-dd 不比较 HH:mm:ss
            date = 1956-09-12
            date2 = 1956-09-15
            差值为 3
            【12、13、14、15】应该是只算了13、14、15,为 3
            第三个参数为 false 时,与 between 方法一致
         */
        long betweenDay = DateUtil.betweenDay(date, date2, true);
        /*
            计算相差天数,传入两个Date,返回long,只比较 yyyy-MM-dd 不比较 HH:mm:ss
            date = 1956-09-12
            date2 = 1956-09-15
            差值为 3
            【12、13、14、15】应该是只算了13、14,为 2
         */
        long betweenDAY = DateUtil.between(date, date2, DateUnit.DAY);
        
        //精确到毫秒,返回结果为毫秒数
        long betweenMS = DateUtil.between(date, date2, DateUnit.MS);
        //精确到秒,返回结果为秒数
        long betweenSECOND = DateUtil.between(date, date2, DateUnit.SECOND);
        //精确到分钟,返回结果为分钟数
        long betweenMINUTE = DateUtil.between(date, date2, DateUnit.MINUTE);
        //精确到小时,返回结果为小时数
        long betweenHOUR = DateUtil.between(date, date2, DateUnit.HOUR);

格式化时间差

XX天XX小时XX分XX秒

传入两个Date,计算差值,第三个参数为精确等级(时、分、秒、毫秒等)

java 复制代码
String formatBetween = DateUtil.formatBetween(date, date2, BetweenFormatter.Level.MINUTE);
java 复制代码
String formatBetween = DateUtil.formatBetween(DateUtil.between(date,date2,DateUnit.MS), BetweenFormatter.Level.MINUTE);
星座、属相
java 复制代码
// "天秤座"
String zodiac = DateUtil.getZodiac(9, 12);

// "猴"
String chineseZodiac = DateUtil.getChineseZodiac(1956);
年龄、闰年
java 复制代码
        //年龄
        int age = DateUtil.ageOfNow("1956-09-12");

        //是否闰年
        boolean leapYear = DateUtil.isLeapYear(2003);
相关推荐
曲径海盗3 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
Cosolar4 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github
nice_lcj5205 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发
北京云帆互联科技5 小时前
云帆培训考试系统更新说明:v9.3.0
java·学习
学长毕设6 小时前
基于SpringBoot的景点管理系统-附源码
java·spring boot·后端
sxlishaobin7 小时前
Maven Setting详解
java·学习·maven
知守观7 小时前
一个方法两个触发口:反编译 XXL-Job 后,我看清了 inner/job 子包的裸奔现状
java·spring boot·微服务
用户3126874877207 小时前
CompletableFuture 链式编排:异步编程的优雅解法
java
瑞雪兆丰年兮7 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
神仙别闹8 小时前
基于 Java GUI 贪心策略直接搜索算法和极大极小博弈树算法的智能人机博弈五子棋游戏
java·毕业设计·gui·贪心策略·极大极小博弈树