当前位置: 首页 > news >正文

Hutool之DateUtil:让Java日期处理变得更加简单

image

前言

  在Java开发中,日期和时间的处理是一个常见问题。为了简化这个过程,许多开发者会使用第三方工具包,如Hutool。Hutool是一个Java工具包,提供了许多实用的功能,其中之一就是日期处理。日期时间工具类是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象如下:

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

一、概述

1.1 工具简介

  Hutool 的 DateUtil 工具类是 Hutool 工具库中用于日期和时间处理的核心类之一,提供了许多静态方法,用于方便地处理常见的日期和时间操作。考虑到 Java 本身对日期时间的支持有限,并且 Date 和 Calendar 对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位。

1.2 引入依赖

  在使用Hutool工具之前,我们需要将Hutool添加到项目的依赖中。如果使用Maven构建项目,可以在 pom.xml 文件中添加以下依赖:

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version>
</dependency>

  Hutool-all 是一个 Hutool 的集成打包产品,由于考虑到“懒人”用户及分不清各个模块作用的用户,“无脑”引入 hutool-all 模块是快速开始和深入应用的最佳方式。如果你想像 SpringBoot 一样引入 Hutool,再由子模块决定用到哪些模块,你可以在父模块中加入:

<dependencyManagement><dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-bom</artifactId><version>${hutool.version}</version><type>pom</type><!-- 注意这里是import --><scope>import</scope></dependency></dependencies>
</dependencyManagement>

  然后再在子模块中就可以引入自己需要的模块了:

<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId></dependency>
</dependencies>

二、基本使用示例

2.1 计算生日

方法部分参数作用
age(Date birthday, Date dateToCompare)birthday:生日
dateToCompare:需要对比的日期
计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄
ageOfNow(String birthDay)birthDay:生日,标准日期字符串生日转为年龄,计算法定年龄
ageOfNow(Date birthDay)birthDay:生日生日转为年龄,计算法定年龄
getChineseZodiac(int year)计算生肖,只计算1900年后出生的人
getZodiac(int month, int day)通过生日计算星座

2.2 获取时间属性

2.2.1 获取当前时间

  Hutool 提供了多种方式获取当前时间,例如当前时间戳、当前日期字符串等等。

方法部分参数作用
DateTime date()将当前时间转换为DateTime对象
DateTime date(Calendar calendar)根据已有 Calendar 转换为 DateTime对象
DateTime dateSecond()当前时间,转换 DateTime 对象,忽略毫秒部分
String now()当前时间,格式 yyyy-MM-dd HH:mm:ss
String today()当前日期,格式 yyyy-MM-dd
long current()当前时间的时间戳
long currentSeconds()当前时间的时间戳(秒)

2.2.2 获取当前时间属性

方法部分参数作用
int getLastDayOfMonth(Date date)获得本月的最后一天
int thisDayOfMonth()当前日期所在月份的第几周
int thisDayOfWeek()当前日期是星期几
int thisHour(boolean is24HourClock)is24HourClock - 是否24小时制当前日期的小时数部分
int thisMinute()当前日期的分钟数部分
int thisMillisecond()当前日期的毫秒数部分
int thisMonth()当前月份,从0开始计数
int thisSecond()当前日期的秒数部分
int thisWeekOfMonth()当前日期所在月份的第几周
int thisWeekOfYear()当前日期所在年份的第几周
thisYear今年
// 当前时间
Date date = DateUtil.date();
System.out.println(date);// Calendar转Date
System.out.println(DateUtil.date(Calendar.getInstance()));// 时间戳转Date
System.out.println(DateUtil.date(System.currentTimeMillis()));// 当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
System.out.println(DateUtil.now());// 当前日期字符串,格式:yyyy-MM-dd
System.out.println(DateUtil.today());

2.2.3 获取时间部分属性

方法部分参数作用
DateTime date()将当前时间转换为DateTime对象
int year(Date date)获得年的部分
int month(Date date)获得月份,从0开始计数
int hour(Date date, boolean is24HourClock)is24HourClock - 是否24小时制获得指定日期的小时数部分
int minute(Date date)获得指定日期的分钟数部分
int second(Date date)获得指定日期的秒数部分
int millisecond(Date date)获得指定日期的毫秒数部分
Date date = DateUtil.date();// 获得年的部分
int year = DateUtil.year(date);// 获得月份,从0开始计数
int month = DateUtil.month(date);// 获得月份枚举
DateUtil.monthEnum(date).getValue();

2.2.4 获取指定时间属性

方法部分参数作用
int dayOfMonth(Date date)获得指定日期是这个日期所在月份的第几天
int dayOfWeek(Date date)获得指定日期是星期几,1表示周日,2表示周一
dayOfWeekEnum获得指定日期是星期几
int dayOfYear(Date date)获得指定日期是这个日期所在年的第几天
int quarter(Date date)获得指定日期所属季度,从1开始计数
String yearAndQuarter(Date date)获得指定日期年份和季节。例如[20131]表示2013年第一季度
int lengthOfMonth(int month,boolean isLeapYear)isLeapYear - 是否闰年获得指定月份的总天数
int lengthOfYear(int year)获得指定年份的总天数
int millisecond(Date date)获得指定日期的毫秒数部分
int minute(Date date)获得指定日期的分钟数部分

2.3 获取某时间的开始、结束日期

  有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:

方法部分参数作用
DateTime beginOfYear(Date date)获取某年的开始时间
DateTime endOfYear(Date date)获取某年的结束时间
DateTime beginOfQuarter(Date date)获取某季度的开始时间
DateTime endOfQuarter(Date date)获取某季度的结束时间
DateTime beginOfMonth(Date date)获取某月的开始时间
DateTime endOfMonth(Date date)获取某月的结束时间
DateTime beginOfWeek(Date date)获取某周的开始时间,周一为一周的开始
beginOfWeek(Date date,boolean isMondayAsFirstDay)isMondayAsFirstDay:是否周一做为一周的第一天获取某周的开始时间
DateTime endOfWeek(Date date)获取某周的结束时间,周日为一周的结束
endOfWeek(Date date,boolean isSundayAsLastDay)isSundayAsLastDay:是否周日做为一周的最后一天获取某周的结束时间
DateTime beginOfDay(Date date)获取某天的开始时间
DateTime endOfDay(Date date)获取某天的结束时间
beginOfHour(Date date)获取某小时的开始时间
endOfHour(Date date)获取某小时的结束时间
beginOfMinute(Date date)获取某分钟的开始时间
endOfMinute(Date date)获取某分钟的结束时间
beginOfSecond(Date date)
DateTime beginOfSecond(Date date)获取秒级别的开始时间,即毫秒部分设置为0
String dateStr = "2022-11-09 22:33:23";
Date date = DateUtil.parse(dateStr);// 一天的开始,结果:2022-11-09 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);// 一天的结束,结果:2022-11-09 23:59:59
Date endOfDay = DateUtil.endOfDay(date);// 获取秒级别的开始时间,即毫秒部分设置为0
System.out.println(DateUtil.beginOfSecond(date));// 获取某周的开始时间
System.out.println(DateUtil.beginOfWeek(date));

2.4 日期时间计算

  Hutool 提供了丰富的日期计算方法,例如获取某天的开始时间、结束时间,计算两个日期之间的天数、小时等等。

2.4.1 日期时间比较

方法部分参数作用
int compare(Date date1,Date date2)日期比较。
如果date1 < date2,小于0,date1==date2返回0,date1 > date2 大于0
boolean isIn(Date date,Date beginDate, Date endDate)当前日期是否在日期指定范围内
boolean isSameDay(Date date1,Date date2)比较两个日期是否为同一天
boolean isSameMonth(Date date1,Date date2)比较两个日期是否为同一月
boolean isSameTime(Date date1,Date date2)比较两个日期的时间戳是否相同
boolean isSameWeek(Date date1,Date date2)比较两个日期是否为同一周

2.4.2 日期时间偏移计算

  日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。Hutool也针对其做了大量封装:

方法部分参数作用
offset(Date date, DateField dateField, int offset)offset - 偏移量,正数为向后偏移,负数为向前偏移获取指定日期偏移指定时间后的时间,
生成的偏移日期不影响原日期
offsetDay(Date date, int offset)偏移天
offsetHour(Date date, int offset)偏移小时
offsetMillisecond(Date date, int offset)偏移毫秒数
offsetMinute(Date date, int offset)偏移分钟
offsetMonth(Date date, int offset)偏移月
offsetSecond(Date date, int offset)偏移秒数
offsetWeek(Date date, int offset)偏移周
tring dateStr = "2022-11-09 22:33:23";
Date date = DateUtil.parse(dateStr);//结果:2022-11-11 22:33:23
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);//常用偏移,结果:2023-11-12 22:33:23
DateTime newDate2 = DateUtil.offsetDay(date, 3);//常用偏移,结果:22023-11-09 19:33:23
DateTime newDate3 = DateUtil.offsetHour(date, -3);

  针对当前时间,提供了简化的偏移方法(例如昨天、上周、上个月等):

方法部分参数作用
yesterday昨天
tomorrow明天
lastWeek上周
nextWeek下周
lastMonth上个月
nextMonth下个月

2.4.3 计算两个时间之差

  有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法:

方法部分参数作用
between(Date beginDate, Date endDate, DateUnit unit)beginDate:起始日期
endDate:结束日期
unit:相差的单位
判断两个日期相差的时长,只保留绝对值
between(Date beginDate, Date endDate, DateUnit unit, boolean isAbs)beginDate:起始日期
endDate:结束日期
unit:相差的单位
判断两个日期相差的时长
betweenMs(Date beginDate, Date endDate)beginDate:起始日期
endDate:结束日期
判断两个日期相差的毫秒数
betweenDay(Date beginDate, Date endDate, boolean isReset)beginDate:起始日期
endDate:结束日期
isReset:是否重置时间为起始时间
判断两个日期相差的天数。
betweenWeek(Date beginDate, Date endDate, boolean isReset)beginDate:开始时间
endDate:结束时间
isReset:是否重置时间为起始时间
计算指定时间区间内的周数
betweenMonth计算两个日期相差月数。
betweenYear计算两个日期相差年数。
String dateStr1 = "2022-11-09 22:33:23";
Date date1 = DateUtil.parse(dateStr1);String dateStr2 = "2022-12-09 23:33:23";
Date date2 = DateUtil.parse(dateStr2);// 相差一个月,31天
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);Date startDate=DateUtil.parse("2021-04-20 02:00:00");
Date endDate=DateUtil.parse("2021-04-21 05:10:00");				
long week=DateUtil.between(startDate,endDate,DateUnit.WEEK);	//相差周数
long day=DateUtil.between(startDate,endDate,DateUnit.DAY);		//相差天数
long hour=DateUtil.between(startDate,endDate,DateUnit.HOUR);	//相差小时数
long minute=DateUtil.between(startDate,endDate,DateUnit.MINUTE);//相差分钟数
long second=DateUtil.between(startDate,endDate,DateUnit.SECOND);//相差秒数
long millis=DateUtil.between(startDate,endDate,DateUnit.MS);	//相差毫秒数

2.5 日期解析

方法部分参数作用
parse(CharSequence dateCharSequence)将日期字符串转换为 Date 对象
parse(CharSequence dateStr, DateFormat dateFormat)dateStr:Date字符串
dateFormat:格式化器 SimpleDateFormat
parse(CharSequence dateStr, DateParser parser)dateStr:Date字符串
parser:格式化器 FastDateFormat
parse(CharSequence dateStr,DateParser parser,boolean lenient)dateStr:Date字符串
parser:格式化器 FastDateFormat
lenient:是否宽容模式
parse(CharSequence dateStr, DateTimeFormatter formatter)dateStr:Date字符串
formatter:格式化器 DateTimeFormatter
parse(CharSequence dateStr, String format)dateStr:特定格式的日期
format:格式,例如yyyy-MM-dd
将特定格式的日期转换为Date对象
parse(CharSequence dateStr, String format, Locale locale)dateStr:特定格式的日期
format:格式,例如yyyy-MM-dd
locale:区域信息
将特定格式的日期转换为Date对象
parse(String str, String… parsePatterns)通过给定的日期格式解析日期时间字符串
parseDate(CharSequence dateCharSequence)解析日期字符串
parseDateTime(CharSequence dateCharSequence)解析日期时间字符串
parseLocalDateTime(CharSequence dateCharSequence)构建LocalDateTime对象
parseTime(CharSequence dateCharSequence)解析时间,格式HH:mm:ss,
parseTimeToday(CharSequence dateCharSequence)解析时间,格式HH:mm或HH:mm:ss
parseUTC(String utcString)解析UTC时间
String dateStr = "2022-11-09";
Date date = DateUtil.parse(dateStr);Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

2.6 日期格式化

2.6.1 格式化日期时间

  Hutool 对日期进行了非常详细的封装,可以有效避免我们自己的日期格式出现混乱的情况。而且 hutool 为我们提供了多个日期格式解析,转换成 yyyy-MM-dd HH:mm:ss 格式,同时我们可以引用这些日期格式:

方法部分参数作用
format(Date date, DateFormat format)将 Date 对象格式化为指定的字符串
format(Date date, String format)根据特定格式格式化日期
formatChineseDate(Date date,boolean isUppercase,boolean withTime)date - 被格式化的日期
isUppercase - 是否采用大写形式
withTime - 是否包含时间部分
格式化为中文日期格式。
formatDate(Date date)格式化日期部分(不包括时间)
formatDateTime(Date date)格式化日期时间
formatHttpDate(Date date)格式化为Http的标准日期格式
formatLocalDateTime格式化日期时间
formatTime(Date date)格式化时间
String dateStr = "2023-11-09";
Date date = DateUtil.parse(dateStr);//结果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");//常用格式的格式化,结果:2023-11-09
String formatDate = DateUtil.formatDate(date);//结果:2023-11-09 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);//结果:00:00:00
String formatTime = DateUtil.formatTime(date);

2.6.2 格式化时间差

 有时候我们希望看到易读的时间差,比如XX天XX小时XX分XX秒,此时使用DateUtil.formatBetween方法:

方法部分参数作用
formatBetween(Date beginDate, Date endDate)格式化日期间隔输出,精确到毫秒
formatBetween(Date beginDate, Date endDate, BetweenFormatter.Level level)格式化日期间隔输出
formatBetween(long betweenMs)格式化日期间隔输出,精确到毫秒
formatBetween(long betweenMs, BetweenFormatter.Level level)格式化日期间隔输出

【说明】BetweenFormatter 即格式化等级枚举,支持DAY(天)、HOUR(小时)、MILLISECOND(毫秒)、MINUTE(分钟)、SECOND(秒)等。

Date startDate=DateUtil.parse("2021-04-20 02:00:00");
Date endDate=DateUtil.parse("2021-04-21 05:10:00");//相差毫秒数
long millis=DateUtil.between(startDate,endDate,DateUnit.MS);
//相差1天(天)
String formatDay = DateUtil.formatBetween(millis, BetweenFormatter.Level.DAY);
//相差1天3小时(小时)
String formatHour = DateUtil.formatBetween(millis, BetweenFormatter.Level.HOUR);
//相差1天3小时10分(分钟)
String formatMinute = DateUtil.formatBetween(millis, BetweenFormatter.Level.MINUTE);
//相差1天3小时10分(秒)
String formatSecond = DateUtil.formatBetween(millis, BetweenFormatter.Level.SECOND);
//相差1天3小时10分(毫秒)
String formatMillis = DateUtil.formatBetween(millis, BetweenFormatter.Level.MILLISECOND);

2.7 其他

2.7.1 日期时间判断

  Hutool 可以方便地判断日期是否在某个范围内、是否是周末等等。

方法部分参数作用
boolean isAM(Date date)是否为上午
boolean isLastDayOfMonth是否为本月最后一天
boolean isLeapYear(int year)判断指定年份是否是闰年
boolean isOverlap(Date realStartTime,Date realEndTime,Date startTime,Date endTime)检查两个时间段是否有时间重叠
boolean isPM(Date date)是否为下午
boolean isWeekend(Date date)date - 判定的日期Date是否为周末(周六或周日)
// 定义时间范围
Date startDate = DateUtil.parse("2025-04-01");
Date endDate = DateUtil.parse("2025-04-30");// 需要判断的日期
Date date = DateUtil.parse("2025-04-18");
// 判断日期是否在范围内
boolean isInRange = DateUtil.isIn(date, startDate, endDate);
System.out.println("isInRange = " + isInRange);// 判断是否是周末
boolean isWeekend = DateUtil.isWeekend(date);
System.out.println("日期是否是周末:" + isWeekend);

2.7.2 时间计时

方法部分参数作用
String secondToTime(int seconds)秒数转为时间格式(HH:mm:ss)
long spendMs(long preTime)计时,常用于记录某段代码的执行时间,单位:毫秒
long spendNt(long preTime)计时,常用于记录某段代码的执行时间,单位:纳秒
timer()计算某个过程花费的时间,精确到毫秒
timer(boolean isNano)isNano - 是否使用纳秒计数,false则使用毫秒计算某个过程花费的时间,精确到毫秒
int timeToSecond(String timeStr)HH:mm:ss时间格式字符串转为秒数

三、总结

  通过学习 Hutool 工具库中的 DateUtil 工具类,我们可以方便地处理日期和时间相关的操作。它提供了许多实用的方法,可以简化我们在日常开发中的日期处理工作,提高开发效率,减少出错的可能性。而且 DateUtil 在实现上进行了性能优化,对常见的日期和时间操作进行了高效处理,同时尽量避免了线程安全问题。

  Hotool 不仅仅只有这一种工具类,还包含了其他许多工具类。在这里我作为一名Hutool的用户,我感谢Hutool的创作者和维护者们为我们带来如此强大便捷的工具库,希望Hutool功能越来越完善,为我们的开发工作带来更多的便利。同时也祝愿所有开发者没有BUG困扰,能够愉快地编写出高效、功能完善的程序。

image

相关文章:

Hutool之DateUtil:让Java日期处理变得更加简单

前言 在Java开发中&#xff0c;日期和时间的处理是一个常见问题。为了简化这个过程&#xff0c;许多开发者会使用第三方工具包&#xff0c;如Hutool。Hutool是一个Java工具包&#xff0c;提供了许多实用的功能&#xff0c;其中之一就是日期处理。日期时间工具类是Hutool的核心包…...

解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例

历史灾害文献分析方法论的研究&#xff0c;是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析&#xff0c;不仅能够重建千年尺度的灾害事件序列&#xff08;如台风、洪旱等&#xff09;&#xff0c;弥补仪器观测数据的时空局限性&#…...

DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析

随着大模型技术的迅猛发展&#xff0c;国产模型正逐渐崭露头角&#xff0c;尤其是DeepSeek-R3的发布&#xff0c;更是在AI技术社区中引起广泛关注。而与此同时&#xff0c;国际领先的GPT-4o和Claude-3.5-Sonnet也在不断迭代升级&#xff0c;持续刷新业界对AI能力的认知。下文将…...

智能翻译播放器,让无字幕视频不再难懂

打工人们你们好&#xff01;这里是摸鱼 特供版~ 今天给大家带来一款超牛的黑科技——Splayer&#xff0c;完全免费的智能翻译播放器&#xff0c;让你轻松看懂无字幕视频&#xff01; 推荐指数&#xff1a;★★★★★ 软件简介 Splayer 是一款完全免费的智能翻译播放器&#…...

快手本地生活2024年GMV同增200%,“新线城市+AI”将成增长引擎

4月17日&#xff0c;“新线大市场&#xff0c;AI新机遇”快手本地生活2025聚力大会在沈阳召开。 会上&#xff0c;快手高级副总裁、本地生活事业部负责人笑古在聚力大会上表示&#xff0c;“新线城市AI”将成为快手本地生活的增长引擎。 据「TMT星球」了解&#xff0c;2024年…...

第七篇:系统分析师第三遍——1、2章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&#xff0c;训练快速阅读能力、掌…...

2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)

2025 年第十五届 MathorCup 数学建模D题完整分析论文 目录 摘要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;MATLAB和Python&#xff09; 4.1.4问题1结果…...

软考高级-系统架构设计师 论文范文参考(一)

文章目录 论SOA技术的应用论SOA在企业信息化中的应用论UP&#xff08;统一过程方法&#xff09;的应用论分布式数据库的设计与实现论改进Web服务器性能的有关技术论基于UML的需求分析论基于构件的软件开发论基于构件的软件开发(二) 论SOA技术的应用 摘要&#xff1a;  本人于…...

江湖路远,唯PUT可稳:Express 路由更新招式全解

前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...

【k8s系列1】一主两从结构的环境准备

环境准备 虚拟机软件准备及安装&#xff0c;这里就不详细展开了&#xff0c;可以看文章:【一、虚拟机vmware安装】 linux环境准备及下载&#xff0c;下载镜像centOS7.9&#xff0c;以前也有写过这个步骤的文章&#xff0c;可以看&#xff1a;【二、安装centOS】 开始进入正题…...

通过特定协议拉起 electron 应用

在 Android 通过 sheme 协议可以拉起其他应用。 electron 应用也可以通过类似特定协议被拉起。 在同时有 web、客户端的应用里&#xff0c;可以通过这种方式在 web 拉起客户端。 支持拉起客户端 const PROTOCOL xxxif (process.defaultApp) {// 这里是开发环境&#xff0c;有…...

IDEA MyBatisCodeHelper Pro插件高版本解密

声明&#xff0c;该方法仅仅作为个人研究学习使用&#xff0c;请勿传播 版本说明 系统&#xff1a;macOS&#xff08;Windows同理&#xff09;IDE&#xff1a;IntelliJ IDEA 2024.4MyBatisCodeHelper Pro 3.4 环境准备 从插件市场下载MyBatisCodeHelper Pro 找到MyBatisCo…...

网站制作公司哪家好?如何选择靠谱的网站设计公司

在当今数字化时代&#xff0c;企业想要在互联网上立足&#xff0c;一个专业、美观且功能强大的网站是必不可少的。然而&#xff0c;面对众多的网站建设公司&#xff0c;如何选择一家真正适合自己需求的合作伙伴&#xff0c;成为了许多企业主和创业者面临的难题。毕竟&#xff0…...

Linux之基础命令

Linux作为开源操作系统的代表&#xff0c;以其高效、灵活和强大的命令行工具闻名。无论是系统管理、开发调试还是日常使用&#xff0c;掌握基础命令都是与Linux系统交互的必备技能。本文整理了20个最常用的Linux基础命令&#xff0c;帮助新手快速入门。 目录 目录与文件导航文…...

使用手机归属地查询API,使效率事半功倍

手机归属地查询API通过查询手机号码的归属地信息&#xff0c;为企业提供了一个高效、便捷的解决方案&#xff0c;帮助企业在竞争激烈的市场中脱颖而出。 代码示例 请求参数说明: 名称必填类型说明key是string个人中心查看phone是int手机号 返回参数说明: 名称类型说明phon…...

基于FPGA的AES加解密系统verilog实现,包含testbench和开发板硬件测试

目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 4.1 字节替换&#xff08;SubBytes&#xff09; 4.2 行移位&#xff08;ShiftRows&#xff09; 4.3 列混合&#xff08;MixColumns&#xff09; 4.4 轮密钥加&#xff08;AddRoundKey&#xff09; 4.…...

【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心

访问部署在Cloud Studio上的web服务 当你把该项目部署在本地时&#xff0c;访问该服务的请求地址为http://localhost:8080/hello&#xff1b;当你把该项目部署在Cloud Studio工作台启动时&#xff0c;要想访问到该服务&#xff0c;需要先在工作台右侧打开访问链接面板&#xff…...

Linux:命令行参数、环境变量

命令行参数 执行程序时&#xff0c;可以从命令行传值给 C 程序。这些值被称为命令行参数&#xff0c;它们对程序很重要&#xff0c;特别是当我们想从外部控制程序&#xff0c;而不是在代码内对这些值进行硬编码时&#xff0c;就显得尤为重要了。 在 C 语言中&#xff0c;命令…...

Linux CentOS 更改MySQL数据库目录位置

在 CentOS 系统上更改 MySQL&#xff08;或 MariaDB&#xff09;数据库目录位置&#xff08;datadir&#xff09;需要谨慎操作&#xff0c;以避免数据丢失或服务启动失败。以下是详细步骤&#xff1a; 1. 停止 MySQL/MariaDB 服务 bash 复制 sudo systemctl stop mysqld …...

Unity-微信截图功能简单复刻-03绘制空心矩形

思路-绘制空心矩形 拓展UGUI的Graphic类,实现拖拽接口。 开始拖拽时记录鼠标位置&#xff0c; 使用拖拽中的鼠标位置和记录的位置&#xff0c;计算矩形顶点&#xff0c;绘制矩形。 两个三角形合并为一个矩形&#xff0c;作为空心矩形的一条边&#xff0c;四个边合并为空心矩形…...

Flutter与FastAPI的OSS系统实现

作者&#xff1a;孙嘉成 目录 一、对象存储 二、FastAPI与对象存储 2.1 缤纷云S4服务API对接与鉴权实现 2.2 RESTful接口设计与异步路由优化 三、Flutter界面与数据交互开发 3.1 应用的创建 3.2页面的搭建 3.3 文件的上传 关键词&#xff1a;对象存储、FastAPI、Flutte…...

环境搭建与入门:Flutter SDK安装与配置

环境搭建与入门&#xff1a;Flutter SDK安装与配置 一、Flutter开发环境概述 1.1 Flutter开发环境组成 Flutter开发环境主要包含以下几个关键组件&#xff1a; Flutter SDK&#xff1a;Flutter的核心开发工具包Dart SDK&#xff1a;Flutter使用的编程语言环境IDE/编辑器&am…...

MATLAB 控制系统设计与仿真 - 35

MATLAB鲁棒控制器分析 所谓鲁棒性是指控制系统在一定(结构&#xff0c;大小)的参数扰动下&#xff0c;维持某些性能的特征。 根据对性能的不同定义&#xff0c;可分为稳定鲁棒性(Robust stability)和性能鲁棒性(Robust performance)。 以闭环系统的鲁棒性作为目标设计得到的…...

多模态记忆融合:基于LSTM的连续场景生成——突破AI视频生成长度限制

一、技术背景与核心挑战 2025年视频生成领域面临的关键难题是长时程连贯性——传统方法在生成超过5分钟视频时会出现场景跳变、物理规则不一致等问题。本研究提出时空记忆融合架构&#xff08;ST-MFA&#xff09;&#xff0c;通过LSTM记忆门控与多模态对齐技术&#xff0c;在R…...

架构师面试(三十二):注册中心数据结构

问题 提到【注册中心】&#xff0c;我们对它的基本功能&#xff0c;肯定可以顺手拈来&#xff0c;比如&#xff1a;【服务注册】【服务发现】【健康检查】【变更通知】等。 透过这些基本功能&#xff0c;一个普适的注册中心的数据结构应该如何设计呢&#xff1f; 可以结合着…...

Oracle 19c新特性:OCP认证考试与职业跃迁的关键?

在数字化转型的浪潮中&#xff0c;Oracle 19c作为数据库领域的旗舰版本&#xff0c;不仅承载着技术革新的使命&#xff0c;更成为IT从业者职业进阶的“黄金跳板”。无论是企业级应用的高可用性需求&#xff0c;还是云原生架构的快速迭代&#xff0c;Oracle 19c的智能化与多模型…...

360蜘蛛IP完整版,360搜索引擎蜘蛛IP列表.pdf

360搜索的蜘蛛在访问网站时&#xff0c;都会带上带有360spider签名信息的UA&#xff0c;其形态为&#xff1a; Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider 为满足站长朋友们的需求&a…...

C++_设计模式\_观察者模式(Observer Pattern)

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

23种设计模式全面解析

设计模式是解决软件设计中常见问题的经典方案。根据《设计模式&#xff1a;可复用面向对象软件的基础》&#xff08;GoF&#xff09;&#xff0c;23种设计模式分为以下三类&#xff1a; 一、创建型模式&#xff08;5种&#xff09; 目标&#xff1a;解耦对象的创建过程&#x…...

学术AI工具推荐

一、基础信息对比 维度知网研学AI&#xff08;研学智得AI&#xff09;秘塔AIWOS AI开发公司同方知网&#xff08;CNKI&#xff09;上海秘塔网络科技Clarivate Analytics是否接入DeepSeek✅ 深度集成&#xff08;全功能接入DeepSeek-R1推理服务&#xff09;✅ 通过API接入DeepS…...

Agent的九种设计模式 介绍

Agent的九种设计模式 介绍 一、ReAct模式 原理:将推理(Reasoning)和行动(Acting)相结合,使Agent能够在推理的指导下采取行动,并根据行动的结果进一步推理,形成一个循环。Agent通过生成一系列的思维链(Thought Chains)来明确推理步骤,并根据推理结果执行相应的动作,…...

Python如何助力区块链网络安全?从攻击防范到智能合约审计

Python如何助力区块链网络安全?从攻击防范到智能合约审计 引言:区块链安全,真的安全吗? 区块链作为去中心化技术的代表,被誉为“不可篡改”的分布式账本。但事实真的如此吗?现实世界中,智能合约漏洞、私钥泄露、交易欺诈等安全问题层出不穷,让区块链网络安全成为一个关…...

磁流变式汽车减振器创新设计与关键技术研究

摘要 本文针对智能悬架系统的发展需求&#xff0c;深入探讨磁流变减振器&#xff08;MR Damper&#xff09;的核心设计原理与工程实现路径。通过建立磁场-流场耦合模型&#xff0c;优化磁路结构与控制策略&#xff0c;提出具有快速响应特性的新型磁流变减振器设计方案&#xf…...

Kafka 时间轮

Kafka存在大量的延迟操作&#xff0c;比如延迟删除、延迟拉取等。Kafka基于时间轮概念自定义了一个用于延迟操作的定时器。 JDK自带的Timer和DelayQueue缺陷 Timer和DelayQueue都可以插入多个定时任务&#xff0c;它们都使用一个优先级队列来管理任务&#xff0c;复杂度为O(l…...

加锁注意事项

结论&#xff1a; 1&#xff1a;加锁前不能有可能异常的代码结构&#xff0c;原因&#xff1a;没加锁&#xff0c;直接因为上边的异常走finall解锁&#xff0c;导致不必要的问题 2&#xff1a;加锁后&#xff0c;try之前。有异常代码&#xff0c;导致无法走到try进行解锁.后果&…...

Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由 -动态增加路由 动态路由-动态删除…...

hive的基础配置优化与数仓流程

1.HDFS副本数 dfs.replication&#xff08;HDFS&#xff09; 文件副本数&#xff0c;通常设为3&#xff0c;不推荐修改。 如果测试环境只有二台虚拟机&#xff08;2个datanode节点&#xff09;&#xff0c;此值要修改为2。 2.Yarn基础配置 2.1NodeManager配置 2.1.1CPU配置 …...

制作一个简单的操作系统3

打印一个 hello 在 INT 10H 中断中的作用 INT 10H 是 BIOS 提供的中断&#xff0c; 当 AH 寄存器的值被设置为 0x0e 时&#xff0c;INT 10H 中断就会以 TTY 模式工作。 mov ah, 0x0e ;tty模式 mov al, H int 0x10 mov al, e int 0x10 mov al, l int 0x10 int 0x10 ; l is stil…...

linux ptrace 图文详解(六) gdb单步调试

目录 一、gdb单步调试介绍 二、单步调试原理 三、MDSCR_EL1对单步调试的支持、及起作用时机 四、代码实现 五、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders …...

51、项⽬中的权限管理怎么实现的

答&#xff1a;权限管理有三个很重要的模块&#xff1b; (1)⽤⼾模块&#xff1a;可以给⽤⼾分配不同的⻆⾊ (2)⻆⾊模块&#xff1a;可以授于⽤⼾不同的⻆⾊&#xff0c;不同的⻆⾊有不同权限 (3)权限模块&#xff1a;⽤于管理系统中的权限接⼝&#xff0c;为⻆⾊提供对…...

第五章 SQLite数据库:4、SQLite 进阶用法:常见的约束、PRAGMA 配置、数据操作

SQLite PRAGMA PRAGMA 命令用于查询和设置 SQLite 数据库的环境配置&#xff0c;可以帮助管理数据库的行为和性能。 语法 查询 PRAGMA 值&#xff1a; PRAGMA pragma_name;设置 PRAGMA 值&#xff1a; PRAGMA pragma_name value;常见 PRAGMA 示例 1. auto_vacuum Pragma…...

Windows系统安装Boost库

安装Boost库 下载Boost库源码 Boost Downloads 从Boost官方网站下载源码。请访问Boost官网&#xff0c;选择适合您系统的版本进行下载。下载完成后&#xff0c;解压源文件到您选择的目录。 使用Bootstrap脚本准备编译 在Boost源码的根目录下&#xff0c;找到bootstrap.bat文件…...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 学校进行体育跳远期末考试,每人有三次机会,取最远的一次作为最后成绩,1班的成绩如下,CLASS1=[[‘李明’,150,152,147],[‘王红’,146,143,146],[‘刘岩’,148,152,150],[…...

Git 解决“Filename too long”问题

在 Windows 系统中使用 Git 时&#xff0c;遇到 Filename too long 错误通常是由于系统默认的路径长度限制&#xff08;260 字符&#xff09;导致的。以下是综合多种场景的解决方案&#xff1a; 一、快速解决方法 启用 Git 长路径支持 通过 Git 配置命令允许处理超长文件名&am…...

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_自定义单元格大小示例(CalendarView01_07)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

麦科信汽车诊断示波器在机车维修领域中的应用实例

麦科信汽车诊断示波器在机车维修领域中的应用实例 “Micsig SATO1004的错误帧统计功能与历史波形存储&#xff0c;让我们在诊断间歇性CAN故障时有了决定性武器。这不仅是工具升级&#xff0c;更是维修理念的革新。” — Ian Coffey, Mototek技术总监&#xff08;欧洲ECU诊…...

Zookeeper 概述

Zookeeper 概述 Zookeeper 概述与使用指南什么是Zookeeper&#xff1f;Zookeeper的主要作用使用Zookeeper的框架典型使用场景1. 配置管理2. 分布式锁3. 服务注册与发现 Zookeeper的缺陷与其他协调服务的比较实际案例&#xff1a;Kafka使用Zookeeper最佳实践 Zookeeper 概述与使…...

leetcode 188. Best Time to Buy and Sell Stock IV

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析明确并理解递推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这道题把第123题推广为一…...

Kubernetes》》k8s》》Namespace

Namespace 概述 Namespace&#xff08;命名空间&#xff09; 是 Kubernetes 中用于逻辑隔离集群资源的机制&#xff0c;可将同一集群划分为多个虚拟环境&#xff0c;适用于多团队、多项目或多环境&#xff08;如开发、测试、生产&#xff09;的场景。 核心作用&#xff1a; 资…...

如何在米尔-STM32MP257开发板上部署环境监测系统

本文将介绍基于米尔电子MYD-LD25X开发板&#xff08;米尔基于STM35MP257开发板&#xff09;的环境监测系统方案测试。 摘自优秀创作者-lugl4313820 一、前言 环境监测是当前很多场景需要的项目&#xff0c;刚好我正在论坛参与的一个项目&#xff1a;Thingy:91X 蜂窝物联网原型…...