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

深入了解Java8新特性-日期时间API_LocalDate类

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概12000多字,预计阅读时间长需要10分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

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类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概12000多字&#xff0c;预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…...

PyTorch基本操作和工作流程

1. PyTorch基础 张量&#xff08;Tensors&#xff09;&#xff1a; 学习 PyTorch 中表示数据的基本单元。了解如何创建、操作和使用张量。 自动微分&#xff08;Autograd&#xff09;&#xff1a; 了解 PyTorch 的自动微分机制&#xff0c;这是训练神经网络的核心。 模型定义…...

Android开发从0开始(ContentProvider与数据)

内容提供者&#xff1a;ContentProvider 为App存取内部数据提供外部接口&#xff0c;让不同应用共享数据。 ①在配置里AndroidManifest.xml <provider android:name".UserInfoProvider" android:authorities"com.example.chapter07_server.provider.U…...

STM32_6(TIM)

TIM定时器&#xff08;第一部分&#xff09; TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在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 安装工具&#xff1a;该hal命令的apt源地址https://us-apt.pkg.dev/projects/spinnaker-community位于国外halyard boms物料清单&#xff1a;Spinnaker 将其halyard boms配置存储在公共谷歌云存储 ( g…...

TypeScript 学习笔记 第三部分 贪吃蛇游戏

尚硅谷TypeScript教程&#xff08;李立超老师TS新课&#xff09; 1. 创建开发环境 创建工程&#xff0c;使用学习笔记的第二部分安装css部分 npm i -D less less-loader css-loader style-loader对css部分处理&#xff0c;能够运行在低版本浏览器 npm i -D postcss postcss…...

【spring(一)】核心容器总结

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 IOC 配置bean对象&#xff1a; DI 注入bean对象 ①.setter方法注入 ②.构造器注入 Bean的实例化 1.setter方法注入(重点) 2.静态工厂&#xff08;了解&#xff09; 3.实例工厂&#xff08;了解&#xff0…...

易点易动固定资产管理系统:实现全面的固定资产采购管理

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

力扣:178. 分数排名(Python3)

题目&#xff1a; 表: Scores ---------------------- | Column Name | Type | ---------------------- | id | int | | score | decimal | ---------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都包含了一场比赛的分数。Score …...

raid磁盘阵列

在单机时代&#xff0c;采用单块磁盘进行数据存储和读写的方式&#xff0c;由于寻址和读写的时间消耗&#xff0c;导致I/O性能非常低&#xff0c;且存储容量还会受到限制。另外&#xff0c;单块磁盘极其容易出现物理故障&#xff0c;经常导致数据的丢失。此时&#xff0c;RAID技…...

SpringBoot学习笔记-实现微服务:匹配系统(上)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 配置WebSocket2. 前后端WebSocket通信2.1 WS通信的建立2.2 加入JWT验证 3. 前后端匹配业务3.1 实现前端页面3.2 实现前后端交互逻辑3.3 同步游戏地图 …...

重磅!全球首个“绿色黑灯工厂”落户中国,竟然是这家企业……

作者&#xff1a;叶蓁 “52”、“白加黑”、“无人看守作业”&#xff0c;这是九牧“绿色黑灯工厂”的几大关键词。 九牧绿色黑灯工厂不仅是单体产量最大的工厂&#xff0c;也是全球首个入选的“绿色黑灯工厂”。 11月17日&#xff0c;中国节能协会授予九牧5G智能马桶工厂全球…...

go语言学习-异常处理

1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误&#xff0c;需要做处理 }3、自定义错误 有两种方法&#xff1a;1、通过…...

如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式

在本教程中&#xff0c;我们将学习如何使用 JavaScript 创建一个上传图片的功能&#xff0c;并将所选图片转换为 LaTeX 公式。我们将使用 FileReader 对象来读取图片并将其转换为 Base64 格式&#xff0c;然后利用 img2latex API 将其转换为 LaTeX 公式。 1. HTML 结构 首先&…...

深刻理解MySQL8游标处理中not found

深刻理解MySQL8游标处理中not found 最近使用MySQL的游标&#xff0c;在fetch循环过程中&#xff0c;程序总是提前退出 &#xff0c;百思不得其解&#xff0c;经过测试&#xff0c;原来是对于游标处理中not found的定义理解有误&#xff0c;默认是视同Oracle的游标not found定…...

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升

当今全球化时代下&#xff0c;全球商业环境面临前所未有的机遇和挑战&#xff0c;企业需要持续的业务变革、组织优化来进行降本增效&#xff0c;企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具&#xff0c;企业内管理软件系统也越来越多。 为了适应当前企业…...

第99步 深度学习图像目标检测:SSDlite建模

基于WIN10的64位系统演示 一、写在前面 本期&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型的后续版本&#xff0c;SSDlite模型。 二、SSDlite简介 SSDLite 是 SSD 模型的一个变种&#xff0c…...

用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做视频拉流转推RTMP流的功能的时候&#xff0c;发现怎么做CPU占用都会很高&#xff0c;但是视频没有调用转码&#xff0c;vcodec用的就是copy&#xff0c;这是什么原因呢&#xff1f; 我们用在线的RTSP流就不会出现这种情况&#x…...

Vatee万腾科技的独特力量:Vatee数字时代创新的新视野

在数字化时代的浪潮中&#xff0c;Vatee万腾科技以其独特而强大的创新力量&#xff0c;为整个行业描绘了一幅崭新的视野。这不仅是一场科技创新的冒险&#xff0c;更是对未来数字时代发展方向的领先探索。 Vatee万腾将创新视为数字时代发展的引擎&#xff0c;成为推动行业向前的…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...