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

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的核心包…...

Ambari 中移除/重装 yarn 集群中的 NodeManager 节点

文章目录 背景分析解决分析:现有 NodeManager 情况移除:240 服务器上的 NodeManager重新安装:240 服务器上的安装 NodeManager疑问为什么直接添加就可以运行?参考背景 项目中有Spark应用,主要在 yarn 集群中部署。 现在发现 yarn 集群中的节点资源过剩,需要将部分节点移…...

小程序在 skyline 下如何开启多行省略

参考&#xff1a;https://developers.weixin.qq.com/community/develop/doc/000a648baacca06e83f1034d66c000 前言 小程序在 skyline 下不支持 line-clamp&#xff0c;想要开启多行省略使用 text 组件的 max-lines 结合 overflow 属性。 解决办法&#xff1a;skyline 下不支…...

uni.createInnerAudioContext踩坑duration在真机环境一直为0

解决 uni.createInnerAudioContext 的 duration 在真机环境一直为 0 的问题 在使用 uni.createInnerAudioContext 播放音频时,开发者可能会遇到以下问题: duration 在真机环境中一直为 0:即使音频文件是正常的,duration 属性也无法正确获取音频的时长。音频实例未放到全局…...

《MySQL:MySQL数据类型分类》

数据类型分类 数值类 tinyint类型 数值越界测试。 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。 无符号整型数值越界测试。 如果我们向mysql特定的类型中插入不合法的数据&#xff0c;my…...

Kubernetes》》k8s》》Namespace

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

ZYNQ笔记(八):UART 串口中断

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;UART串口中断实验&#xff0c;实现串口中断数据回环&#xff08;接收数据并发送出去&#xff09; 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 ZYNQ 的 UART&#xff08;Unive…...

vue3 nprogress 使用

nprogress 介绍与作用 1.nprogress 是一个轻量级的进度条组件&#xff0c;主要用于在页面加载或路由切换时显示一个进度条&#xff0c;提升用户体验。它的原理是通过在页面顶部创建一个 div&#xff0c;并使用 fixed 定位来实现进度条的效果 2.在 Vite Vue 3 项目中&#xf…...

相比其他缓存/内存数据库(如 Memcached, Ehcache 等),Redis 在微服务环境中的优势和劣势是什么?

我们来比较一下 Redis 与 Memcached、Hazelcast、Ehcache 等在微服务环境下的优势和劣势。 Redis 的优势 : 丰富的数据结构 (Rich Data Structures): 优势: 这是 Redis 最显著的优势之一。除了简单的 Key-Value (字符串) 外&#xff0c;Redis 还原生支持 Lists, Sets, Sorted …...

生态篇|多总线融合与网关设计

引言 1. 车内多总线概览 2. 主流车载总线技术对比 3. 网关设计原则与架构 4. 协议转换与映射策略 5. 安全与诊断功能集成...

Node做BFF中间层架构优化前端开发体验并提升系统整体性能。

文章目录 1. BFF 层的定位2. 技术选型3. 架构设计3.1 分层设计3.2 示例架构 4. 核心功能实现4.1 数据聚合4.2 权限校验4.3 缓存优化 5、实战示例1. 场景说明2. ECharts 数据格式要求3. BFF 层实现步骤3.1 接收前端参数3.2 调用后端服务获取数据 4. 前端使用 总结 在使用 Node.j…...

基于autoware1.14的实车部署激光雷达循迹,从建图、定位、录制轨迹巡航点、到实车运行。

1.首先安装autoware &#xff0c;大家可以以下一下博客进行安装&#xff0c;如果缺少库什么的直接问ai安装对应的库就行。ubuntu18.04安装Autoware1.14---GPU版 最全环境配置说明_autoware1.14安装教程-CSDN博客 安装成功后运行&#xff1a; source install/setup.bash roslau…...

数据类型相关问题导致的索引失效 | OceanBase SQL 优化实践

背景 针对在OceanBase 论坛中遇到的一些典型SQL调优问题&#xff0c;进行记录与总结&#xff0c;分享给大家。本文介绍的事3个场景&#xff1a;数据类型不匹配、字符集相关属性不匹配&#xff0c;和过滤/联接条件上包含系统函数。 场景一&#xff1a;数据类型不匹配 类型不匹…...

云计算(Cloud Computing)概述——从AWS开始

李升伟 编译 无需正式介绍亚马逊网络服务&#xff08;Amazon Web Services&#xff0c;简称AWS&#xff09;。作为行业领先的云服务提供商&#xff0c;AWS为全球开发者提供了超过170项随时可用的服务。 例如&#xff0c;Adobe能够独立于IT团队开发和更新软件。通过AWS的服务&…...

UE学习记录part18

225 animation blueprint templates: generic animation blueprints 在Animation Blueprint中选择template生成动画蓝图模板 在function中选择blurprintthreadsafeupdateanimation&#xff0c;用于做数据的更新 先创建变量&#xff0c;再将变量再blueprintinitializeanimation…...

刀片服务器的散热构造方式

刀片服务器的散热构造是其高密度、高性能设计的核心挑战之一。其散热系统需在有限空间内高效处理多个刀片模块产生的集中热量,同时兼顾能耗、噪音和可靠性。以下从模块化架构、核心散热技术、典型方案对比、厂商差异及未来趋势等方面展开分析: 一、模块化散热架构 刀片服务器…...

算法01-最小生成树prim算法

最小生成树prim算法 题源&#xff1a;代码随想录卡哥的题 链接&#xff1a;https://kamacoder.com/problempage.php?pid1053 时间&#xff1a;2025-04-18 难度&#xff1a;4⭐ 题目&#xff1a; 1. 题目描述&#xff1a; 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&…...

【每日八股】复习计算机网络 Day1:TCP 的头部结构 + TCP 确保可靠传输 + TCP 的三次握手

文章目录 复习计算机网络 Day1TCP 的头部结构TCP 如何保证可靠传输&#xff1f;1. 数据完整性保障2. 顺序与去重控制3. 流量与拥塞控制4. 连接控制5. 其他辅助机制TCP 可靠传输的保障手段总结 TCP 的三次握手&#xff1f;TCP 为什么要三次握手&#xff1f;TCP 三次握手出现报文…...

device_fingerprint、device_id、hmac生成

文章目录 1. 写在前面2. 设备信息3. 数美指纹 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...

高防IP如何针对DDoS攻击特点起防护作用

高防IP通过​​多层防护机制​​和​​动态资源调度能力​​&#xff0c;针对性化解DDoS攻击的核心特征&#xff08;如大流量、协议滥用、连接耗尽等&#xff09;。以下是其具体防护策略与技术实现&#xff1a; ​​一、DDoS攻击的核心特点与高防IP的针对性策略​​ ​​攻击特…...

python抓取HTML页面数据+可视化数据分析(投资者数量趋势)

本文所展示的代码是一个完整的数据采集、处理与可视化工具&#xff0c;主要用于从指定网站下载Excel文件&#xff0c;解析其中的数据&#xff0c;并生成投资者数量的趋势图表。以下是代码的主要功能模块及其作用&#xff1a; 1.网页数据获取 使用fetch_html_page函数从目标网…...

C++ std::function的含义、意义和用法,与std::bind的区别

在 C 中&#xff0c;std::function 是一个通用的多态函数包装器&#xff0c;它是 C 标准库 <functional> 头文件中的一部分。下面从含义、意义和用法三个方面详细介绍 std::function。 含义 std::function 是一个类模板&#xff0c;它可以存储、复制和调用任何可调用对…...

uboot下读取ubifs分区的方法

在uboot 的defconfig中增加以下内容&#xff1a; CONFIG_MTDIDS_DEFAULT"nand0nand0" CONFIG_MTDPARTS_DEFAULT"mtdpartsnand0:1M(boot1),1M(boot2),1M(hwinfo),6M(kernel1),6M(kernel2),56M(rootfs1),56M(rootfs2),-(ubi2)" CONFIG_CMD_UBIy 其中&#x…...

HAL详解

一、直通式HAL 这里使用一个案例来介绍直通式HAL&#xff0c;选择MTK的NFC HIDL 1.0为例&#xff0c;因为比较简单&#xff0c;代码量也比较小&#xff0c;其源码路径&#xff1a;vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定义 1&#xff09;NFC HAL数据类型 通常定…...

MCP(模型上下文协议)说明

背景 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;旨在解决大型语言模型&#xff08;LLM&#xff09;与外部数据源及工具集成的问题。由Anthropic公司于2024年11月提出并开源&#xff0c;目标是实现AI模型与现有系统的无缝集成。 解决的问题…...

AI当前状态:有哪些新技术

一、到目前为址AI领域出现的新技术 到目前为止&#xff0c;AI领域涌现了许多令人兴奋的新技术。以下是一些关键的进展&#xff0c;涵盖了从基础模型到实际应用的多个方面&#xff1a; 1. 更强大的大型语言模型 (LLMs): 性能提升: 新一代LLM&#xff0c;例如OpenAI的GPT-4o和…...

如何校验一个字符串是否是可以正确序列化的JSON字符串呢?

方法1&#xff1a;先给一个比较暴力的方法 try {JSONObject o new JSONObject(yourString); } catch (JSONException e) {LOGGER.error("No valid json"); } 方法2&#xff1a; Object json new cn.hutool.json.JSONTokener("[{\"name\":\"t…...

orcad csi 17.4 DRC规则设置及检查

rCAD绘制完原理图之后总是需要开启DRC检测&#xff0c;但是DRC一般都是英文版的&#xff0c;下面基于Cadence17.4 的orCAD16.6 对DRC的界面做简单的介绍 首先&#xff0c;鼠标点击原理图&#xff0c;然后再点击右上方的小勾图标 desine rules check option选项的界面 电气规…...

k8s教程3:Kubernetes应用的部署和管理

学习目标 理解Kubernetes中应用部署的基本概念和方法掌握Deployment、ReplicaSet、StatefulSet、DaemonSet、Job与CronJob等控制器的使用了解Helm作为Kubernetes的包管理工具的基本使用通过实际示例学习应用的部署、更新与管理 Kubernetes提供了一套强大而灵活的机制&#xff…...

微信小程序获得当前城市,获得当前天气

// // 获取用户当前所在城市 // wx.getLocation({// type: wgs84, // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 // success: function(res) {// console.log(获取位置成功, res); // // 使用腾讯地图API进行逆地址解析 // wx…...