深入了解Java8新特性-日期时间API_LocalDate类
阅读建议
嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:
- 本篇文章大概12000多字,预计阅读时间长需要10分钟。
- 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
- 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。
LocalDate
Java 8的LocalDate类是Java日期和时间API的一部分,没有时间和时区的概念,是线程安全的,用于表示不包含时间的日期,位于java.time包下。
核心方法
now()
按系统默认的时区来获取当前日期,返回代表当前日期的 LocalDate 实例。
@Test
public void test() {LocalDate now = LocalDate.now();//当前日期String format = now.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:2023-11-23
}
of(...)
接受一个年份(int)和两个日期(int)作为参数,返回一个表示该年某一天的 LocalDate 实例。日期的第一个参数范围是1到31,第二个参数范围是0到23。
public void test2() {LocalDate localDate = LocalDate.of(2023, 2, 1);//定义一个日期:2023-02-01LocalDate localDate1 = LocalDate.of(2023, Month.FEBRUARY, 1);//定义一个日期:2023-02-01boolean equals = localDate1.equals(localDate);System.out.println(equals);//输出结果:true
}
ofEpochDay(...)
用于将给定的Unix时间戳(自1970年1月1日以来的天数)转换为 LocalDate 对象。这个方法返回一个表示该日期的 LocalDate 实例
@Test
public void test3() {LocalDate localDate2 = LocalDate.ofEpochDay(1);// 假设给定的Unix时间戳为1天String format = localDate2.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:1970-01-02
}
ofInstant(...)
Instant 是 Java 中的一个时间类,表示一个瞬时的时间点,精确到纳秒。Instant.ofEpochSecond()用于根据秒数(从1970年1月1日00:00:00 UTC开始)创建一个新的 Instant 对象。LocalDate.ofInstant() 可以将给定的 Instant 对象转换为 LocalDate 对象。
@Test
public void test4() {Long seconds = 24 * 60 * 60L;//一天的秒数LocalDate localDate = LocalDate.ofInstant(Instant.ofEpochSecond(seconds), ZoneId.systemDefault());String format = localDate.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:1970-01-02
}
ofYearDay(...)
LocalDate.ofYearDay() 用于创建一个表示某一年中特定天数的 LocalDate 对象。方法接受两个参数:年份和一年中的天数。年份表示自1970年以来的年数,天数表示一年中的第几天。例如,1月1日是第1天,2月15日是第46天。需要注意的是,这个方法并不会对输入的天数进行有效性检查,因此如果输入的天数超出了给定年份的范围(例如,在2月输入了30),那么创建出来的 LocalDate 对象可能不准确。
@Test
public void test5() {LocalDate localDate = LocalDate.ofYearDay(2023, 2);String format = localDate.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:2023-01-02
}
get(...)
LocalDate.get(...) 可以获取给定日期的特定部分,如年份、月份或日期。具体来说,如果你调用 LocalDate.get(ChronoField),其中 ChronoField 是 java.time.temporal.ChronoField 的实例,那么就会返回该日期对应的特定部分。ChronoField 是一个枚举类型,包含如 YEAR、MONTH_OF_YEAR、DAY_OF_MONTH 等各种表示时间的字段。
@Test
public void test6() {LocalDate localDate = LocalDate.now();int year = localDate.get(ChronoField.YEAR);//得到年份int month = localDate.get(ChronoField.MONTH_OF_YEAR);//得到月份int day = localDate.get(ChronoField.DAY_OF_MONTH);//得到当月中第几天int weekOfMonth = localDate.get(ChronoField.ALIGNED_WEEK_OF_MONTH);//得到当月的第几周System.out.println("year:"+year+",month:"+month+",day:"+day+",weekOfMonth:"+weekOfMonth);
}
getYear()、getMonthValue() 、getDayOfMonth()、getDayOfWeek()、getDayOfYear()
- getYear(): 获取该日期的年份部分。例如,对于日期 "2023-06-24",该方法将返回2023。
- getMonthValue(): 获取该日期的月份部分。例如,对于日期 "2023-06-24",该方法将返回6。
- getDayOfMonth(): 获取该日期中的月份中的日期部分。例如,对于日期 "2023-06-24",该方法将返回24。
- getDayOfWeek(): 获取该日期是星期几的信息。该方法将返回一个枚举类型的值,如MONDAY、TUESDAY等。
- getDayOfYear(): 获取该日期是当年的第几天。例如,对于日期 "2023-06-24",该方法将返回175。
@Test
public void test13() {LocalDate d1 = LocalDate.of(2023, 11, 23);int year = d1.getYear();//年份:023int monthValue = d1.getMonthValue();//月份:11int dayOfMonth = d1.getDayOfMonth();//当月第几天:23int dayOfWeek = d1.getDayOfWeek().getValue();//当前周第几天:4int dayOfYear = d1.getDayOfYear();//当前年第几天:327
}
parse(...)
LocalDate的parse()用于从字符串值创建LocalDate的实例。这个方法需要一个参数,即要解析的字符串。该字符串不能为空。此方法返回的是从作为参数传递的字符串值获得的LocalDate实例。
@Test
public void test7() {LocalDate parse = LocalDate.parse("2023-11-23", DateTimeFormatter.ISO_DATE);LocalDate parse1 = LocalDate.parse("2023-11-23");System.out.println(parse1.equals(parse));//输出结果:true
}
format(...)
LocalDate的format()方法的功能是将日期进行格式化,使用指定的格式化程序。具体来说,这个方法接受一个DateTimeFormatter对象作为参数,这个对象定义了一个日期时间的格式。然后,这个方法会返回一个字符串,该字符串表示按照指定格式化程序格式化的日期。例如,如果我们有一个LocalDate对象代表着2019年5月8日的日期,我们可以使用format方法将它格式化为"MMM dd, yyyy"的格式,即"May 08, 2019"。
@Test
public void test8() {LocalDate now = LocalDate.now();String format = now.format(DateTimeFormatter.ISO_DATE);String format1 = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));System.out.println(format);//输出结果:2023-11-23System.out.println(format1);//输出结果:2023/11/23
}
atTime(...)
LocalDate.atTime(hour, minute)的功能是将给定的日期与特定时间进行组合,生成一个LocalDateTime对象。具体来说,这个方法可以将日期部分和时间部分进行组合。例如,如果你有一个LocalDate对象表示今天的日期,并且你想在下午3点钟添加30分钟的时间,你可以使用atTime方法来实现这个功能。
@Test
public void test9(){LocalDate now = LocalDate.now();LocalDateTime localDateTime = now.atTime(13, 30,59);String format = localDateTime.format(DateTimeFormatter.ISO_DATE_TIME);System.out.println(format);//输出结果:2023-11-23T13:30:59
}
compareTo(...)
LocalDate.compareTo() 用于比较两个日期对象。具体来说,这个方法将此日期与另一个日期进行比较。如果此日期在时间上大于、等于或小于指定日期,则分别返回正整数、零或负整数。
@Test
public void test10() {LocalDate t1 = LocalDate.of(2023, 2, 1);//定义一个日期:2023-02-01LocalDate t2 = LocalDate.of(2023, Month.FEBRUARY, 2);//定义一个日期:2023-02-02int i = t2.compareTo(t1);//如果t2>t1,,返回正数;如果t2=t1,返回0;如果t2<t1,返回负数;System.out.println(i);//
}
datesUntil(...)
LocalDate.datesUntil(...) 用于计算从当前日期到指定日期之间的日期范围。该方法返回一个表示该日期范围的流(Stream)。具体来说,datesUntil(LocalDate endExclusive) 重载形式接受一个终止日期参数,并返回从调用 datesUntil() 方法的 LocalDate 对象(起始日期)到终止日期之前的所有日期的流。
@Test
public void test11() {LocalDate d1 = LocalDate.of(2023, 2, 26);LocalDate d2 = LocalDate.of(2023, 3, 26);Stream<LocalDate> stream = d1.datesUntil(d2);stream.forEach(System.out::println);//注意:输出结果不包含结束日期Stream<LocalDate> stream1 = d1.datesUntil(d2, Period.ofDays(5));//输出的日期之间的间隔是5天stream1.forEach(System.out::println);
}
from(...)
LocalDate.from(...) 用于从给定的 TemporalAccessor 对象创建 LocalDate 的实例。TemporalAccessor 是Java时间日期API中的一个接口,它提供了对日期和时间信息的访问权限,LocalDate、LocalDateTime等都实现了该接口;
@Test
public void test12(){LocalDateTime nowTime = LocalDateTime.now();LocalDate from = LocalDate.from(nowTime);String format = from.format(DateTimeFormatter.ISO_DATE);System.out.println(format);
}
isAfter(...)、isBefore(...)
LocalDate类的isAfter()和isBefore()方法分别用于检查一个日期是否在另一个日期之后或之前。
具体来说:
- isAfter(ChronoLocalDate other): 此方法检查此日期是否在给定日期之后。如果当前日期在给定日期之后,它将返回true,否则返回false。
- isBefore(ChronoLocalDate other): 此方法检查此日期是否在给定日期之前。如果当前日期在给定日期之前,它将返回true,否则返回false。
@Test
public void test14() {LocalDate d1 = LocalDate.of(2023, 11, 23);LocalDate d2 = LocalDate.of(2023, 11, 24);boolean after = d1.isAfter(d2);System.out.println(after);//输出结果:falseboolean before = d1.isBefore(d2);System.out.println(before);//输出结果:true
}
isLeapYear()
LocalDate.isLeapYear() 用于判断给定的年份是否为闰年。闰年的判断规则是这样的:如果年份能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年。
@Test
public void test15() {LocalDate d1 = LocalDate.of(2020, 11, 23);LocalDate d2 = LocalDate.of(2023, 11, 24);boolean after = d1.isLeapYear();System.out.println(after);//输出结果:trueboolean before = d2.isLeapYear();System.out.println(before);//输出结果:false
}
lengthOfMonth()、lengthOfYear()
LocalDate的lengthOfMonth()方法用于获取此LocalDate表示的月份的长度,即该月份的天数。而lengthOfYear()方法则用于获取此LocalDate表示的年份的长度,即该年份的总天数。这两个方法都是用于计算日期时间的长度,方便进行日期的计算和比较。
@Test
public void test16() {LocalDate d1 = LocalDate.of(2020, 2, 23);int i = d1.lengthOfYear();System.out.println(i);//输出结果:366int j = d1.lengthOfMonth();System.out.println(j);//输出结果:29
}
minus(...)、minusDays(...)、minusMonths(...)、minusWeeks(...)、minusYears(...)
这些方法都是Java中LocalDate类的方法,用于进行日期减法操作,返回一个新的LocalDate对象,表示减去指定时间间隔后的日期。
- minus(...):此方法用于减去给定的时间间隔。它接受一个TemporalAmount参数,可以是时间单位(如小时,分钟,天,月,年等)。
- minusDays(int n):此方法用于减去给定数量的天数。参数n是一个整数,表示要减去的天数。
- minusMonths(int n):此方法用于减去给定数量的月份。参数n是一个整数,表示要减去的月份数。
- minusWeeks(int n):此方法用于减去给定数量的周数。参数n是一个整数,表示要减去的周数。
- minusYears(int n):此方法用于减去给定数量的年数。参数n是一个整数,表示要减去的年数。
@Test
public void test17() {LocalDate d1 = LocalDate.of(2023, 11, 23);LocalDate minus = d1.minus(Period.ofDays(3));//当前日期+3天String format = minus.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:2023-11-20LocalDate minus2 = d1.minusDays(3);//当前日期减去3天String format2 = minus2.format(DateTimeFormatter.ISO_DATE);System.out.println(format2);//输出结果:2023-11-20LocalDate minus3 = d1.minusMonths(1);//当前日期减去1月String format3 = minus3.format(DateTimeFormatter.ISO_DATE);System.out.println(format3);//输出结果:2023-10-23LocalDate minus4 = d1.minusWeeks(1);//当前日期减去1周String format4 = minus4.format(DateTimeFormatter.ISO_DATE);System.out.println(format4);//输出结果:2023-11-16LocalDate minus5 = d1.minusYears(1);//当前日期减去1年String format5 = minus5.format(DateTimeFormatter.ISO_DATE);System.out.println(format5);//输出结果:2022-11-23
}
plus(...)、plusDays(...)、plusMonths(...)、plusWeeks(...)、plusYears(...)
LocalDate类的plus(...)方法是一个通用方法,用于在给定时间单位上增加日期。具体的单位可以通过传递一个ChronoUnit对象来指定,例如plusDays(int days)、plusMonths(int months)、plusWeeks(int weeks)、plusYears(int years)等。
这些方法用于增加LocalDate对象的日期。例如:
- plusDays(int days):增加给定天数。
- plusMonths(int months):增加给定月数。
- plusWeeks(int weeks):增加给定周数。
- plusYears(int years):增加给定年数。
需要注意的是,这些方法返回的是一个新的LocalDate对象,而不是修改原有的对象。因此,需要将结果赋值给一个变量来使用增加后的日期。
@Test
public void test17() {LocalDate d1 = LocalDate.of(2023, 11, 23);LocalDate plus = d1.plus(Period.ofDays(3));//当前日期+3天String format = plus.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:2023-11-26LocalDate plus2 = d1.plusDays(3);//当前日期+3天String format2 = plus2.format(DateTimeFormatter.ISO_DATE);System.out.println(format2);//输出结果:2023-11-26LocalDate plus3 = d1.plusMonths(1);//当前日期+1月String format3 = plus3.format(DateTimeFormatter.ISO_DATE);System.out.println(format3);//输出结果:2023-12-23LocalDate plus4 = d1.plusWeeks(1);//当前日期+1周String format4 = plus4.format(DateTimeFormatter.ISO_DATE);System.out.println(format4);//输出结果:2023-11-30LocalDate plus5 = d1.plusYears(1);//当前日期+1年String format5 = plus5.format(DateTimeFormatter.ISO_DATE);System.out.println(format5);//输出结果:2024-11-23
}
toEpochDay()、toEpochSecond(...)
LocalDate.toEpochDay()的功能是将LocalDate对象转换为自1970年1月1日以来的天数。这个方法返回的是一个长整型(long)的值,它将此本地日期与指定的时间和作为参数传递的偏移量相结合,以计算epoch-second值,该值是从1970-01-01T00:00:00Z开始经过的秒数。
LocalDate.toEpochSecond(LocalTime time, ZoneOffset offset)的功能是将此本地日期与指定的时间和作为参数传递的偏移量相结合,以计算epoch-second值。这个方法接受两个参数,time和offset,它们是本地时间和区域偏移。该方法返回一个长整型(long)的值,表示自1970-01-01T00:00:00Z以来的秒数。
@Test
public void test19() {LocalDate d1 = LocalDate.of(2023, 11, 23);long epochDay = d1.toEpochDay();//自1970-01-01年到当前日期的天数System.out.println(epochDay);long epochSecond = d1.toEpochSecond(LocalTime.now(), ZoneOffset.ofHours(8));//自1970-01-01到当前日期的秒数;中国位于东8区,区域偏移量为+8LocalDate localDate = LocalDate.ofInstant(Instant.ofEpochSecond(epochSecond), ZoneId.systemDefault());//把得到秒数再转换为locaDateSystem.out.println(localDate.equals(d1));//输出结果为true
}
with(...)
LocalDate.with(...)参数是一个 TemporalAdjuster,那么 with 方法会使用传递的调整器作为参数来调整此日期时间,并在调整后,返回调整后的日期时间的副本。
TemporalAdjuster是一个Java 8中引入的日期时间API,用于执行复杂的日期操作。它是一个函数式接口,可以在Temporal对象上执行操作,例如获得下一个星期日、当月的最后一天或下一年的第一天。
TemporalAdjuster有几个预定义的实现类,包括LocalDate、LocalDateTime和TemporalAdjuster接口本身。这些实现类可以用于调整Temporal对象的日期和时间。
使用TemporalAdjuster可以非常方便地执行各种日期操作,例如:
- 获取下一个星期日的日期。
- 获取当月的最后一天的日期。
- 获取下一年的第一天的日期。
- 获取某个日期之后的第N天、第N个星期或第N个月之后的日期。
- 获取某个日期和时间之后的下一个工作日、下一个周末或下一个公众假日。
@Test
public void test20() {UnaryOperator<LocalDate> unaryOperator = item -> item.minusDays(1);//日期调节逻辑:减去1天TemporalAdjuster temporalAdjuster = TemporalAdjusters.ofDateAdjuster(unaryOperator);//构造日期调节器类LocalDate localDate1 = LocalDate.of(2023, 11, 22);//日期:2023-11-22LocalDate localDate2 = localDate1.with(temporalAdjuster);//执行调节逻辑,并返回调节后结果String dateStr2 = localDate2.format(DateTimeFormatter.ISO_DATE);System.out.println(dateStr2);//输出结果:2023-11-21
}
withDayOfMonth(...)、withDayOfYear(...)
LocalDate类中的withDayOfMonth(...)和withDayOfYear(...)方法用于调整日期的天数。
withDayOfMonth(int dayOfMonth)方法接受一个整数参数,表示月份中的某一天。该方法将此日期调整为给定日期的月份中的指定天数,并返回一个新的日期对象。例如,如果当前日期是2023年3月10日,调用withDayOfMonth(15)将返回一个新的日期对象,表示2023年3月15日。
withDayOfYear(int dayOfYear)方法接受一个整数参数,表示一年中的某一天。该方法将此日期调整为给定年份中的指定天数,并返回一个新的日期对象。例如,如果当前日期是2023年3月10日,调用withDayOfYear(150)将返回一个新的日期对象,表示2023年7月10日(因为7月有31天,所以150减去3月的剩余天数)。
这两个方法都返回一个新的日期对象,不会修改原始的LocalDate对象。这些方法可以用于执行各种日期调整操作,例如计算下个月的第一天或上个月的最后一天等。
@Test
public void test21() {LocalDate d1 = LocalDate.of(2023, 11, 22);//日期:2023-11-22LocalDate d2 = d1.withDayOfMonth(1);String format = d2.format(DateTimeFormatter.ISO_DATE);System.out.println(format);//输出结果:2023-11-01LocalDate localDate3 = d1.withDayOfYear(1);String format2 = localDate3.format(DateTimeFormatter.ISO_DATE);System.out.println(format2);//输出结果:2023-01-01}
atStartOfDay()
LocalDate.atStartOfDay() 返回一个 LocalDateTime 实例,该实例表示给定日期的午夜时分。具体来说,它会把日期部分设为当前日期的开始时间(24小时制),时间部分设为 00:00:00。例如,如果今天是2023年6月24日,那么 LocalDate.now().atStartOfDay() 将返回一个表示2023年6月24日00:00:00的 LocalDateTime 对象。
@Test
public void test22() {LocalDate d= LocalDate.of(2023, 11, 22);LocalDateTime localDateTime = d.atStartOfDay();String format = localDateTime.format(DateTimeFormatter.ISO_DATE_TIME);System.out.println(format);//输出结果:2023-11-22T00:00:00
}
适用场景
- 日期处理:LocalDate类适用于只需要处理日期的场景,而不考虑时间部分。例如,记录生日、纪念日、账单日等。
- 日期计算:可以使用LocalDate类进行日期的加减运算,例如计算两个日期之间的天数、月数或年数。
- 日期格式化:可以使用LocalDate类和DateTimeFormatter类进行日期的格式化操作,将日期转换为指定的字符串格式。
- 日期时间转换:可以将带有时间的日期转换为不带时间的LocalDate对象,或者将LocalDate对象转换为带有时间的日期时间对象(如LocalDateTime)。
相关文章:

深入了解Java8新特性-日期时间API_LocalDate类
阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概12000多字,预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&…...
PyTorch基本操作和工作流程
1. PyTorch基础 张量(Tensors): 学习 PyTorch 中表示数据的基本单元。了解如何创建、操作和使用张量。 自动微分(Autograd): 了解 PyTorch 的自动微分机制,这是训练神经网络的核心。 模型定义…...

Android开发从0开始(ContentProvider与数据)
内容提供者:ContentProvider 为App存取内部数据提供外部接口,让不同应用共享数据。 ①在配置里AndroidManifest.xml <provider android:name".UserInfoProvider" android:authorities"com.example.chapter07_server.provider.U…...

STM32_6(TIM)
TIM定时器(第一部分) TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅…...

Linux中flask项目开启https访问
1.下载阿里云免费证书 2.项目添加https配置 3.服务器开启https访问 3.1 重新安装OpenSSL 3.2.重新安装Python 上一次已经讲过Linux安装部署Python: Linux安装Python3.10与部署flask项目实战详细记录,今天记录一下Python项目如何支持https访问…...

Kubernetes 离线部署 Spinnaker
离线部署 Spinnaker 离线部署 spinnaker 需要提前准备以下依赖项 halyard 安装工具:该hal命令的apt源地址https://us-apt.pkg.dev/projects/spinnaker-community位于国外halyard boms物料清单:Spinnaker 将其halyard boms配置存储在公共谷歌云存储 ( g…...

TypeScript 学习笔记 第三部分 贪吃蛇游戏
尚硅谷TypeScript教程(李立超老师TS新课) 1. 创建开发环境 创建工程,使用学习笔记的第二部分安装css部分 npm i -D less less-loader css-loader style-loader对css部分处理,能够运行在低版本浏览器 npm i -D postcss postcss…...
【spring(一)】核心容器总结
🌈键盘敲烂,年薪30万🌈 目录 IOC 配置bean对象: DI 注入bean对象 ①.setter方法注入 ②.构造器注入 Bean的实例化 1.setter方法注入(重点) 2.静态工厂(了解) 3.实例工厂(了解࿰…...

易点易动固定资产管理系统:实现全面的固定资产采购管理
在现代企业中,固定资产采购管理是一项关键的任务。为了确保企业的正常运营和发展,有效管理和控制固定资产采购过程至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案,整合了从采购需求、采购计划、询比价、采购合同到采购执…...

力扣:178. 分数排名(Python3)
题目: 表: Scores ---------------------- | Column Name | Type | ---------------------- | id | int | | score | decimal | ---------------------- 在 SQL 中,id 是该表的主键。 该表的每一行都包含了一场比赛的分数。Score …...

raid磁盘阵列
在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制。另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失。此时,RAID技…...
SpringBoot学习笔记-实现微服务:匹配系统(上)
笔记内容转载自 AcWing 的 SpringBoot 框架课讲义,课程链接:AcWing SpringBoot 框架课。 CONTENTS 1. 配置WebSocket2. 前后端WebSocket通信2.1 WS通信的建立2.2 加入JWT验证 3. 前后端匹配业务3.1 实现前端页面3.2 实现前后端交互逻辑3.3 同步游戏地图 …...

重磅!全球首个“绿色黑灯工厂”落户中国,竟然是这家企业……
作者:叶蓁 “52”、“白加黑”、“无人看守作业”,这是九牧“绿色黑灯工厂”的几大关键词。 九牧绿色黑灯工厂不仅是单体产量最大的工厂,也是全球首个入选的“绿色黑灯工厂”。 11月17日,中国节能协会授予九牧5G智能马桶工厂全球…...
go语言学习-异常处理
1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误,需要做处理 }3、自定义错误 有两种方法:1、通过…...
如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式
在本教程中,我们将学习如何使用 JavaScript 创建一个上传图片的功能,并将所选图片转换为 LaTeX 公式。我们将使用 FileReader 对象来读取图片并将其转换为 Base64 格式,然后利用 img2latex API 将其转换为 LaTeX 公式。 1. HTML 结构 首先&…...
深刻理解MySQL8游标处理中not found
深刻理解MySQL8游标处理中not found 最近使用MySQL的游标,在fetch循环过程中,程序总是提前退出 ,百思不得其解,经过测试,原来是对于游标处理中not found的定义理解有误,默认是视同Oracle的游标not found定…...

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升
当今全球化时代下,全球商业环境面临前所未有的机遇和挑战,企业需要持续的业务变革、组织优化来进行降本增效,企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具,企业内管理软件系统也越来越多。 为了适应当前企业…...

第99步 深度学习图像目标检测:SSDlite建模
基于WIN10的64位系统演示 一、写在前面 本期,我们继续学习深度学习图像目标检测系列,SSD(Single Shot MultiBox Detector)模型的后续版本,SSDlite模型。 二、SSDlite简介 SSDLite 是 SSD 模型的一个变种,…...

用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?
最近同事在用EasyAVFilter集成在EasyDarwin中做视频拉流转推RTMP流的功能的时候,发现怎么做CPU占用都会很高,但是视频没有调用转码,vcodec用的就是copy,这是什么原因呢? 我们用在线的RTSP流就不会出现这种情况&#x…...

Vatee万腾科技的独特力量:Vatee数字时代创新的新视野
在数字化时代的浪潮中,Vatee万腾科技以其独特而强大的创新力量,为整个行业描绘了一幅崭新的视野。这不仅是一场科技创新的冒险,更是对未来数字时代发展方向的领先探索。 Vatee万腾将创新视为数字时代发展的引擎,成为推动行业向前的…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...