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

Java 时间处理:轻松掌握 java.time 包

前言

在 Java 开发中,日期和时间处理一直是令人头疼的问题。传统的 Date​ 和 Calendar​ 类不仅复杂,还充满了线程安全和时区处理的坑。Java 8 引入的 java.time​ 包彻底改变了这一局面,带来了现代化、直观且功能强大的日期时间 API。

本文将带你深入了解 java.time​ 包的核心功能,从基础的 LocalDate​ 和 LocalTime​ 到强大的 Duration​ 和 Period​,再到灵活的 DateTimeFormatter​,让你轻松掌握日期时间处理的最佳实践。

一、关于java.time包

1.1 简介

java.time​ 包是 Java 8 中引入的,用于处理日期和时间的新 API。它旨在克服旧版 java.util.Date​ 和 java.util.Calendar​ 类中的一些缺点,提供更现代、更简洁、线程安全和不可变的日期和时间处理方式。该 API 基于 ISO-8601 标准,并支持更多的时区、日期/时间格式以及各种常见的时间计算需求。

8db441735eb31b8b78b3bc48855dd98

1.2 核心类和接口

  • LocalDate:表示没有时区的日期(年、月、日)。例如,2025年3月28日。
  • LocalTime:表示没有时区的时间(时、分、秒)。例如,14:30:00。
  • LocalDateTime:表示没有时区的日期和时间(年、月、日、时、分、秒)。例如,2025年3月28日 14:30:00。
  • ZonedDateTime:表示带时区的日期和时间。它不仅包含日期和时间信息,还包含时区信息(例如 UTC+08:00)。
  • Instant:表示时间戳(从1970年1月1日0时0分0秒到某一时刻的秒数或毫秒数),通常用于与 Unix 时间戳和其他基于秒的时间戳的交互。
  • Duration:表示时间段,用于表示两个时间点之间的差异,精度为秒和纳秒。
  • Period:表示日期段,用于表示两个日期之间的差异,精度为年、月和日。
  • Month:表示一个月(如 JANUARY、FEBRUARY 等),是枚举类型。
  • DayOfWeek:表示一周中的某一天(如 MONDAY、TUESDAY 等),也是枚举类型。

java.time包目录结构

image

二、核心类

2.1 LocalDate类

简介

LocalDate​ 类是 Java 8 引入的日期和时间 API(java.time 包)的一部分。它表示一个没有时间部分的日期(例如:2025-03-31),适用于处理年、月、日等信息,而不涉及时间、时区等。

LocalDate​ 代表不带时区的日期。

  • 表示不带时区的日期(年-月-日)。
  • 示例:2023-10-01​。

image

LocalDate​ 使用 ISO-8601 标准来处理日期,并将日期表示为 YYYY-MM-DD​ 的格式。ISO-8601日历系统是当今世界大部分地区使用的现代民用日历系统。相当于现在的公历日历体系,其中表示闰年规则永远适用。

方法

常用方法

  • now()​:获取当前日期。
  • of(int year, int month, int dayOfMonth)​:创建指定日期。
  • plusDays(long days)​:增加天数。
  • minusMonths(long months)​:减少月数。
  • getYear()​, getMonth()​, getDayOfMonth()​:获取日期的各个部分。
  • isLeapYear()​:判断是否为闰年。
  • isBefore(LocalDate other)​:判断当前日期是否在指定日期之前。
  • isAfter(LocalDate other)​:判断当前日期是否在指定日期之后。

示例

import java.time.LocalDate;public class LocalDateExample {public static void main(String[] args) {// 获取当前日期LocalDate today = LocalDate.now();System.out.println("今天: " + today);// 创建指定日期LocalDate specificDate = LocalDate.of(2025, 3, 31);System.out.println("指定日期: " + specificDate);// 日期操作LocalDate tomorrow = today.plusDays(1);System.out.println("明天: " + tomorrow);LocalDate yesterday = today.minusDays(1);System.out.println("昨天: " + yesterday);// 判断是否为闰年boolean isLeapYear = today.isLeapYear();System.out.println("是否为闰年: " + isLeapYear);// 日期比较boolean isBefore = today.isBefore(specificDate);System.out.println("今天是否在指定日期之前? " + isBefore);}
}

image

2.2 LocalTime类

简介

  • 表示不带时区的时间(小时:分钟:秒.纳秒)。
  • 示例:15:30:45.123​。

方法

  • 常用方法:

    • now()​:获取当前时间。
    • of(int hour, int minute, int second)​:创建指定时间。
    • plusHours(long hours)​:增加小时数。
    • minusMinutes(long minutes)​:减少分钟数。
    • getHour()​, getMinute()​, getSecond()​:获取时间的各个部分。

示例

import java.time.LocalTime;public class LocalTimeExample {public static void main(String[] args) {LocalTime time = LocalTime.now();  // 获取当前时间System.out.println(time);  // 输出当前时间,格式如 14:30:00LocalTime specificTime = LocalTime.of(14, 30);  // 创建特定时间System.out.println(specificTime);  // 输出:14:30}
}

image

2.3 LocalDateTime类

关于

简介

LocalDateTime​ 是 java.time​ 包中的一个类,用于表示没有时区信息的日期和时间。它结合了 LocalDate​ 和 LocalTime​,可以表示年份、月份、日期、小时、分钟、秒以及纳秒的信息,但不包含时区。LocalDateTime​ 是不可变的,意味着它的实例一旦创建后就不能被修改,因此它是线程安全的。

  • 表示不带时区的日期和时间(年-月-日T小时:分钟:秒.纳秒)。
  • 示例:2023-10-01T15:30:45.123​。

主要特点
  • 无时区LocalDateTime​ 不包含时区信息,仅表示本地日期和时间。
  • 精确到纳秒:提供纳秒级别的精度。
  • 不可变和线程安全:一旦创建,LocalDateTime​ 的值不能改变,因此是线程安全的。

关联类对比
类名描述示例值
LocalDate仅日期(无时间)2023-10-01
LocalTime仅时间(无日期)15:30:45
LocalDateTime日期 + 时间(无时区)2023-10-01T15:30:45
ZonedDateTime日期时间 + 时区2023-10-01T15:30:45+08:00[Asia/Shanghai]
Instant时间戳(基于 UTC)2023-10-01T07:30:45Z

时间带T

LocalDateTime​ 类中,时间表示格式中的 T 是 ISO 8601 标准规定的日期和时间之间的分隔符。

解释:

在 ISO 8601 格式中,日期和时间通常由字母 “T” 分隔。例如:

2025-03-28T14:30:00

在这个示例中:

  • 2025-03-28​ 是日期部分(年-月-日)
  • 14:30:00​ 是时间部分(小时:分钟:秒)

字母 T 用来清楚地标识日期部分和时间部分的分隔,避免歧义。因此,它并不代表任何特殊的含义,而仅仅是作为分隔符来表示日期和时间的结合。

构造方法

LocalDateTime​ 类提供了多种构造方法来创建日期时间实例:

  • LocalDateTime.now()​:获取当前系统的日期和时间(根据默认时区)。
  • LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute)​:创建指定日期和时间的 LocalDateTime​。
  • LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second)​:创建指定日期、时间和秒的 LocalDateTime​。
  • LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)​:创建指定日期、时间、秒和纳秒的 LocalDateTime​。
  • LocalDateTime.parse(CharSequence text)​:通过字符串解析创建 LocalDateTime​ 对象。

解析字符串(ISO 格式)

LocalDateTime dt = LocalDateTime.parse("2023-10-01T15:30:45");

组合 LocalDate + LocalTime

LocalDateTime dt = LocalDate.now().atTime(LocalTime.of(12, 0));

LocalDate date1 = LocalDate.of(2023, 6, 7);
LocalTime time1 = LocalTime.of(11, 30, 0);
LocalDateTime dateTime1 = LocalDateTime.of(date1, time1);
System.out.println(dateTime1);
//2023-06-07T01:00

old

LocalDateTime startTime, endTime;

在您的代码片段中,声明了两个 LocalDateTime 类型的变量 startTime 和 endTime,但是并没有进行初始化赋值操作,因此它们的值默认为 null。

方法

以下是 LocalDateTime​ 类的常用方法概览:

一、获取当前日期时间
方法名描述
now()获取当前的日期和时间。
now(ZoneId zone)根据指定的时区获取当前日期和时间。
now(Clock clock)根据指定的时钟获取当前日期和时间。
二、创建特定日期时间
方法名描述
of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nano)创建指定日期和时间的 LocalDateTime​ 对象。
of(int year, int month, int dayOfMonth, int hour, int minute, int second)创建指定日期和时间的 LocalDateTime​ 对象(毫秒和纳秒为 0)。
of(int year, int month, int dayOfMonth, int hour, int minute)创建指定日期和时间的 LocalDateTime​ 对象(秒、毫秒和纳秒为 0)。
of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nano)使用 Month​ 枚举创建指定日期和时间的 LocalDateTime​ 对象。
三、解析和格式化
方法名描述
parse(CharSequence text, DateTimeFormatter formatter)使用指定的格式化程序解析字符串,创建 LocalDateTime​ 对象。
format(DateTimeFormatter formatter)使用指定的格式化程序将 LocalDateTime​ 格式化为字符串。
四、获取日期和时间部分
方法名描述
toLocalDate()获取 LocalDateTime​ 对象的日期部分,返回一个 LocalDate​ 对象。
toLocalTime()获取 LocalDateTime​ 对象的时间部分,返回一个 LocalTime​ 对象。
getYear()获取年份。
getMonthValue()获取月份(1-12)。
getDayOfMonth()获取当月的日期(1-31)。
getHour()获取小时(0-23)。
getMinute()获取分钟(0-59)。
getSecond()获取秒(0-59)。
getNano()获取纳秒(0-999,999,999)。
五、日期时间的加减
方法名描述
plusYears(long years)增加指定的年数。
plusMonths(long months)增加指定的月数。
plusWeeks(long weeks)增加指定的周数。
plusDays(long days)增加指定的天数。
plusHours(long hours)增加指定的小时数。
plusMinutes(long minutes)增加指定的分钟数。
plusSeconds(long seconds)增加指定的秒数。
plusNanos(long nanos)增加指定的纳秒数。
minusYears(long years)减少指定的年数。
minusMonths(long months)减少指定的月数。
minusWeeks(long weeks)减少指定的周数。
minusDays(long days)减少指定的天数。
minusHours(long hours)减少指定的小时数。
minusMinutes(long minutes)减少指定的分钟数。
minusSeconds(long seconds)减少指定的秒数。
minusNanos(long nanos)减少指定的纳秒数。
六、比较日期时间
方法名描述
isBefore(LocalDateTime other)判断此日期时间是否在指定的日期时间之前。
isAfter(LocalDateTime other)判断此日期时间是否在指定的日期时间之后。
isEqual(LocalDateTime other)判断此日期时间是否等于指定的日期时间。
compareTo(LocalDateTime other)比较两个日期时间的大小,返回负数、零或正数。
七、时间戳转换
方法名描述
toEpochSecond(ZoneOffset offset)将此日期时间转换为从 1970-01-01T00:00:00Z 开始的秒数。
ofEpochSecond(long epochSecond, int nano, ZoneOffset offset)从秒数和纳秒数创建 LocalDateTime​ 对象。
八、其他方法
方法名描述
with(TemporalAdjuster adjuster)使用指定的调整器调整日期时间。
withYear(int year)设置年份。
withMonth(int month)设置月份。
withDayOfMonth(int dayOfMonth)设置当月的日期。
withHour(int hour)设置小时。
withMinute(int minute)设置分钟。
withSecond(int second)设置秒。
withNano(int nano)设置纳秒。
atZone(ZoneId zone)将此日期时间转换为指定时区的 ZonedDateTime​ 对象。
toLocalDate()获取日期部分。
toLocalTime()获取时间部分。

这些方法提供了丰富的功能来处理日期和时间,包括获取当前日期时间、创建特定日期时间、解析和格式化、日期时间的加减、比较日期时间以及与时间戳的转换等。通过使用这些方法,可以更方便、更准确地处理日期时间相关的操作。

示例

import java.time.LocalDateTime;public class LocalDateTimeExample {public static void main(String[] args) {LocalDateTime dateTime = LocalDateTime.now();  // 获取当前日期和时间System.out.println(dateTime);  // 输出:2025-03-28T14:30:00.123LocalDateTime specificDateTime = LocalDateTime.of(2025, 3, 28, 14, 30);  // 创建特定日期和时间System.out.println(specificDateTime);  // 输出:2025-03-28T14:30}
}

image

2.4 DateTimeFormatter

关于

简介

Java 的 DateTimeFormatter​ 类是 java.time.format​ 包中用于格式化和解析日期时间对象的核心工具,专为 java.time​(Java 8+ 引入的日期时间 API)设计。它替代了旧的 SimpleDateFormat​,具备线程安全更清晰的API设计,支持 ISO-8601 标准及自定义模式。

image

功能
  1. 格式化(Formatting)
    LocalDate​、LocalDateTime​、ZonedDateTime​ 等对象转换为字符串。
  2. 解析(Parsing)
    将字符串解析为日期时间对象。
  3. ISO-8601 兼容
    直接支持 ISO 格式的日期时间表示。
  4. 自定义模式
    通过模式字符串定义灵活的日期时间格式。

方法

方法说明示例
ofPattern(String pattern)创建自定义格式DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
format(TemporalAccessor temporal)格式化日期时间对象localDateTime.format(formatter)
parse(CharSequence text)解析字符串为日期时间对象LocalDate.parse("2023-10-05", formatter)
withZone(ZoneId zone)指定时区formatter.withZone(ZoneId.of("Asia/Shanghai"))

DateTimeFormatter​ 预定义了 ISO 标准的格式化常量,例如:

  • ISO_LOCAL_DATE: yyyy-MM-dd​(如 2023-10-05​)
  • ISO_LOCAL_TIME: HH:mm:ss.SSS​(如 15:30:45.123​)
  • ISO_DATE_TIME: yyyy-MM-dd'T'HH:mm:ss.SSSZ​(如 2023-10-05T15:30:45.123+08:00​)

常见模式符号:

通过模式字符串定义格式:

符号含义示例
yyyy4位年份2023
MM2位月份10
dd2位日期05
HH24小时制小时15
mm分钟30
ss45
SSS毫秒123
Z时区偏移+0800

示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Main {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();// 定义格式模板DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化 LocalDateTime → StringString formattedDate = now.format(formatter);System.out.println(formattedDate);// 解析 String → LocalDateTimeDateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");LocalDateTime parsedDate = LocalDateTime.parse("2024-10-01 15:30", formatter1);System.out.println(parsedDate);}
}

image

2.5 Duration类(时间间隔)

关于

简介

Java 的 Duration​ 类是 java.time​ 包中用于表示基于时间的量(如小时、分钟、秒、纳秒)的不可变类,专为处理时间间隔设计。它与 Period​ 类(处理基于日期的量,如年、月、日)互补,适用于需要精确时间计算的场景。

  • 表示两个时间点之间的时间间隔,单位为秒和纳秒。
  • 示例:计算两个 LocalTime​ 或 LocalDateTime​ 之间的时间差。

image

核心特性
  • 时间单位:支持秒、纳秒,自动转换为标准单位(如 1 小时 = 3600 秒​)。
  • 不可变与线程安全:所有操作返回新对象,适合多线程环境。
  • ISO-8601 兼容:默认遵循 PnYnMnDTnHnMnS​ 格式(如 PT8H30M​ 表示 8 小时 30 分钟)。
  • 精确计算:处理纳秒级精度的时间间隔。

方法

方法说明示例
ofDays(long)​ / ofHours(long)创建指定天、小时的 DurationDuration.ofHours(2)​ → PT2H
ofMinutes(long)​ / ofSeconds(long)创建分钟、秒的 DurationDuration.ofSeconds(90)​ → PT1M30S
between(Temporal start, Temporal end)计算两个时间点之间的间隔Duration.between(startTime, endTime)
plus(Duration)​ / minus(Duration)时间间隔的加减duration.plus(Duration.ofMinutes(10))
toHours()​ / toMinutes()​ / toMillis()转换为其他时间单位duration.toMinutes()​ → 总分钟数
parse(CharSequence)解析 ISO-8601 格式字符串Duration.parse("PT2H30M")​ → 2小时30分钟
isNegative()判断是否为负时间间隔duration.isNegative()

示例

import java.time.Duration;
import java.time.LocalDateTime;public class DurationExample {public static void main(String[] args) {// 创建两个时间点LocalDateTime start = LocalDateTime.of(2025, 3, 31, 10, 0, 0);LocalDateTime end = LocalDateTime.of(2025, 3, 31, 12, 30, 0);// 计算两个时间点之间的持续时间Duration duration = Duration.between(start, end);// 输出持续时间System.out.println("Duration (in hours): " + duration.toHours());        // 2小时System.out.println("Duration (in minutes): " + duration.toMinutes());    // 150分钟System.out.println("Duration (in seconds): " + duration.getSeconds());   // 5400秒}
}

image

2.6 Period类(日期间隔)

关于

简介

Java 的 Period​ 类是 java.time​ 包中用于表示基于日历的日期间隔(如年、月、日)的不可变类,专为处理与日历相关的周期设计(如“2年3个月10天”)。

  • 表示两个日期之间的间隔,单位为年、月和日。
  • 示例:计算两个 LocalDate​ 之间的日期差。

核心特性
  • 日历单位:支持年、月、日,自动处理不同月份和闰年的差异。
  • 不可变与线程安全:所有操作返回新对象,适合多线程环境。
  • ISO-8601 兼容:默认遵循 PnYnMnD​ 格式(如 P1Y2M3D​ 表示1年2个月3天)。
  • 自然日期计算:加减周期时考虑月份和年的实际天数(如 2024-02-28 + P1M = 2024-03-28​)。

方法

常用方法

方法说明示例
of(int years, int months, int days)创建指定年、月、日的 PeriodPeriod.of(1, 2, 3)​ → P1Y2M3D
between(LocalDate start, LocalDate end)计算两个日期之间的间隔Period.between(startDate, endDate)
plus(Period)​ / minus(Period)周期的加减period.plus(Period.ofMonths(1))
getYears()​ / getMonths()​ / getDays()获取年、月、日的数值period.getMonths()​ → 2
parse(CharSequence)解析 ISO-8601 格式字符串Period.parse("P3Y6M")​ → 3年6个月
isNegative()判断是否为负周期period.isNegative()

示例

示例1—创建 Period​ 对象:
import java.time.Period;public class PeriodExample {public static void main(String[] args) {// 使用静态方法创建 Period 对象Period period1 = Period.of(1, 2, 10);  // 1年2个月10天Period period2 = Period.ofYears(3);    // 3年Period period3 = Period.ofMonths(5);   // 5个月Period period4 = Period.ofDays(20);    // 20天// 输出 Period 对象System.out.println("Period 1: " + period1);  // P1Y2M10DSystem.out.println("Period 2: " + period2);  // P3YSystem.out.println("Period 3: " + period3);  // P5MSystem.out.println("Period 4: " + period4);  // P20D}
}

image

示例2—计算两个日期之间的差异
import java.time.LocalDate;
import java.time.Period;public class PeriodExample {public static void main(String[] args) {// 创建两个日期LocalDate startDate = LocalDate.of(2020, 1, 1);LocalDate endDate = LocalDate.of(2023, 3, 15);// 计算两个日期之间的差异Period period = Period.between(startDate, endDate);// 输出差异System.out.println("Years: " + period.getYears());   // 3System.out.println("Months: " + period.getMonths()); // 2System.out.println("Days: " + period.getDays());     // 14}
}

image

三、总结

java.time​的诞生不仅是Java对开发者痛点的回应,更是面向未来时间处理的标杆。其不可变性、线程安全与ISO标准兼容性,使其成为高可靠系统的基石。无论是替换陈旧的Date​,还是应对全球化业务的时区挑战,java.time​都以优雅的设计降低认知成本。作为开发者,掌握这一工具不仅提升代码质量,更能在分布式系统、微服务架构中规避潜在风险。拥抱java.time​,让时间处理从“痛点”变为“亮点”,在复杂业务中真正实现时间自由

3ec794dacde34583aafafe15b1490012

相关文章:

Java 时间处理:轻松掌握 java.time 包

前言 在 Java 开发中,日期和时间处理一直是令人头疼的问题。传统的 Date​ 和 Calendar​ 类不仅复杂,还充满了线程安全和时区处理的坑。Java 8 引入的 java.time​ 包彻底改变了这一局面,带来了现代化、直观且功能强大的日期时间 API。 本…...

Vue项目中Vuex在util引入,断点存在default

示例代码 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 导入默认导出的 store export async function getDict() {store.state.userInf…...

2025宁德时代测评Verify考什么?网申测评如何通过SHL笔试|附真题线上笔试考点、高分攻略、CATL新能源科技SHL测评宁德社招题目、面试攻略、求职建议

——职小豚 带你拆解新能源巨头招聘密码 一、宁德时代:新能源赛道「超级独角兽」 作为全球动力电池龙头,宁德时代(CATL)的江湖地位无需多言: 技术硬实力:麒麟电池、钠离子电池、无钴电池等黑科技加持&…...

谈谈常见的数据结构(如数组、链表、栈、队列、哈希表、树、图)及其应用场景

一、数组(Array) 定义:连续存储相同类型数据的线性结构,支持随机访问。 应用场景:列表渲染、数据缓存、算法处理 代码示例: // 数组基本操作 const arr [1, 2, 3, 4]; arr.push(5); // O(1) 平均时间复杂…...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 AOP:实现日志记录与性能监控

答应我&#xff0c;这篇一定要看到最后~&#xff01; <前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&a…...

【算法】快速幂

一、概念 快速幂是一种高效的指数运算&#xff0c;当指数范围过大时&#xff0c;通过位运算能够减少大量的计算次数 对于&#xff0c;我们通过将指数b转化为二进制数&#xff0c;就可以将分解为许多的&#xff08;其中i是指数b中对应位为1的位数&#xff09; 例如&#xff0…...

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…...

JavaScript 中数组增删改查

在 JavaScript 中,数组是一种用来存储不同类型的值的数据结构。 增加数组元素: let arr = [1, 2, 3];// 在数组末尾添加元素 arr.push(4); console.log(arr); // [1, 2, 3, 4]// 在数组开头添加元素 arr.unshift(0); console.log(arr); // [0, 1, 2, 3, 4]// 在指定位置插…...

【Kettle安装】Kettle安装过程, 电脑已安装java23,安装Kettle 出现报错:尝试启动 Java 虚拟机(JVM)时失败解决方法

Kettle安装 Kettle 通常指的是 Pentaho Data Integration (PDI)&#xff0c;这是一款开源的 ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;用于数据集成、数据清洗和数据分析。它的核心工具名为 Spoon&#xff0c;但整个项目常被直接称为 Kettle 数据…...

Spring笔记04-注解注入

1.导入包 <dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId>…...

[动规19] 最大子数组和

目录 1. 题意 2. 思路 2.1. 状态表示 2.2. 状态转移方程 2.3. 初始化 2.4. 填表顺序 2.5. 返回值 3. 编码 1. 题意 链接: 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&…...

2024年零知识证明(ZK)研究进展

Sumcheck 整个领域正在转向更多地依赖于 Sumcheck Protocol Sumcheck是用于验证多项式承诺的协议&#xff0c;常用于零知识证明&#xff08;ZKP&#xff09;中&#xff0c;尤其是在可验证计算和扩展性上。它的主要目的是通过对多项式进行分段检查&#xff0c;从而保证某个多项…...

1. 两数之和

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 使用map&#xff0c;key作为数值&#xff0c;value作为下标先寻找对应的目标值&#xff0c;如果找到了则直接返回&#xff0c;否则在往map中插入 提示&#xff1a;小白个人理…...

【电动汽车再生制动控制技术(万字长文,图文并茂)】

电动汽车再生制动控制系统概述 电动汽车再生制动的基本原理是:通过具有可逆作用的电动机/发电机来实现电动汽车动能和电能的转化。在汽车减速或制动时,可逆电机以发电机形式工作,汽车行驶的动能带动发电机将汽车动能转化为电能并储存在储能器(蓄电池或超级电容器)中;在汽车…...

python实现股票数据可视化

最近在做一个涉及到股票数据清洗及预测的项目&#xff0c;项目中需要用到可视化股票数据这一功能&#xff0c;这里我与大家分享一下股票数据可视化的一些基本方法。 股票数据获取 目前&#xff0c;我已知的使用python来获取股票数据方式有以下三种: 爬虫获取&#xff0c;实现…...

2025年湖南建筑安全员 C1考证刷题题库

湖南建筑安全员 C1 类的练习题&#xff1a; 1、塔机的拆装作业必须在白天进行&#xff0c;不得在&#xff08; &#xff09;情况下进行。 A. 夜间 B. 大风 C. 浓雾 D. 以上都是 答案&#xff1a;D 2、采用钢筋混凝土灌注桩时&#xff0c;开挖标准是桩身混凝土达到&#…...

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…...

ToolsSet之:梯度色板

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用&#xff0c;应用基本功能介绍可以查看以下文章&#xff1a; Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Media菜单下的“Gradient Palette”工…...

Apache Hive和Snowflake的`CREATE VIEW`语法和功能特性整理的对比表

写一个Apache Hive中CREATE VIEW语句转换为对应Snowflake中CREATE VIEW语句的程序&#xff0c;现在需要一个根据功能的相似性对应的Apache HiveQL和Snowflake SQL的CREATE VIEW语句的表。 以下是基于Apache Hive的CREATE VIEW语法规则构造的所有可能合法语句实例及其功能说明&…...

【测试】每日3道面试题 3/31

长期更新&#xff0c;建议关注收藏点赞。 单元测试策略有哪些&#xff0c;主要内容。 白盒测试黑盒测试基于异常和边界的测试 主要内容&#xff1a;测试用例设计、执行、结果分析、自动化beta测试和alpha测试主要区别 主要区别&#xff1a;测试环境测试者 alphabeta时间先后测…...

用 Hugging Face Spaces 打造哪吒的 3D 模型:完整指南

引言&#xff1a; 哪吒&#xff0c;这位中国神话中的传奇人物&#xff0c;以其独特的形象和故事深受人们喜爱。如今&#xff0c;通过 Hugging Face Spaces 提供的 TripoSG 工具&#xff0c;我们可以轻松创建哪吒的 3D 模型。以下是详细步骤&#xff0c;帮助你将这个神话角色带入…...

鸿蒙应用元服务开发-Account Kit概述

Account Kit&#xff08;华为账号服务&#xff09;提供简单、快速、安全的登录功能&#xff0c;让用户快捷地使用华为账号登录元服务。用户授权后&#xff0c;Account Kit可提供头像、手机号码等信息&#xff0c;帮助元服务更了解用户。Account Kit提供的SampleCode示例工程体现…...

美团小程序 mtgsig1.2 拼好饭案例 分析 mtgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 美团网页、小程序、app全是指…...

hadoop集群和常用命令

Hadoop集群的搭建与管理 1. HADOOP简介 Hadoop 是一种用于大规模数据处理的大数据框架&#xff0c;支持通过简单编程模型实现跨计算机集群的数据分布存储和计算3。 2. HADOOP集群部署过程 (1) 解压并安装HADOOP 在虚拟机环境中&#xff0c;可以通过解压缩方式完成Hadoop的安…...

爬虫:基本流程和robots协议

基本流程&#xff1a; 1.确认目标&#xff1a;url:www.baidu.com 2.发送请求&#xff1a;发送网络请求&#xff0c;获取到特定的服务端给你的响应 3.提取数据&#xff1a;从响应中提取特定的数据 4.保存数据&#xff1a;本地(html,json,txt)&#xff0c;数据库 获取到的响应…...

python之三种去重方法

1. 数据读取与参数解析 代码片段 detail pd.read_csv(detail.csv, index_col0, encodinggbk)数据实例 参数详解 index_col0&#xff1a; 作用&#xff1a;将第1列设置为索引其他选项&#xff1a; None&#xff1a;不指定索引列&#xff08;默认&#xff09;列序号/列名&…...

QML输入控件: TextField(文本框)的样式定制

目录 引言示例简介示例代码与关键点示例1&#xff1a;基础样式定制示例2&#xff1a;添加图标示例3&#xff1a;交互式元素&#xff08;清除按钮&#xff09; 实现要点总结完整工程下载 引言 在Qt Quick应用程序开发中&#xff0c;文本输入是最常见的用户交互方式之一。TextFi…...

Visual Studio | 性能探测器

文章目录 一、性能探测器1、核心功能2、数据采集3、数据分析3.1、CPU分析 前言&#xff1a; Visual Studio&#xff08;VS&#xff09;提供的性能探测器&#xff08;Performance Profiler&#xff09;是一款强大的工具&#xff0c;它能够帮助开发者分析应用程序的性能&#xff…...

数据库中的函数:高效操作与灵活运用

数据库中的函数&#xff1a;高效操作与灵活运用 在数据库开发过程中&#xff0c;函数是常用的工具&#xff0c;可以帮助我们更高效地处理和操作数据。无论是对字符串、数值、日期还是流程控制&#xff0c;数据库函数都能够提供强大的支持。本文将深入探讨常见的数据库函数&…...

《非暴力沟通》第十二章 “重获生活的热情” 总结

《非暴力沟通》第十二章 “重获生活的热情” 的核心总结&#xff1a; 本章将非暴力沟通的核心理念延伸至生命意义的探索&#xff0c;提出通过觉察与满足内心深处的需要&#xff0c;打破“义务性生存”的桎梏&#xff0c;让生活回归由衷的喜悦与创造。作者强调&#xff0c;当行动…...

C++位运算精要:高效解题的利器

引言 在算法竞赛和底层开发中&#xff0c;位运算&#xff08;Bit Manipulation&#xff09;因其极高的执行效率而广受青睐。它能在O(1)时间复杂度内完成某些复杂操作&#xff0c;大幅优化程序性能。本文系统梳理C位运算的核心技巧&#xff0c;涵盖基础操作、经典应用、优化策略…...

从两种遍历方法中构造二叉树

从前序与中序遍历序列构造二叉树 题目描述 代码实现 class Solution { private:unordered_map<int, int> mapIn;TreeNode* dfs(vector<int>& preorder, vector<int>& inorder, int pre_left, int pre_right, int in_left, int in_right){//出口if(…...

【C语言】字符函数的易错点及其模拟实现

在上一章为大家简单介绍了字符函数的种类和基础运用&#xff0c;语法。那么在本章为大家分享一些易错点和自己如何编写一个自定义函数来实现相同的作用。&#xff08;点个关注呗&#xff09; 一strlen&#xff1a;计算字符串长度 1. 函数原型 size_t strlen(const char *str…...

【前端】创建一个vue3+JavaScript项目流程

1、检查node和npm是否安装&#xff0c;查看版本&#xff1a; node -v npm -v 2、安装脚手架cli或vite &#xff08;1&#xff09;cli 安装&#xff1a;npm install -g vue/cli 检查是否安装成功&#xff1a;vue -v 使用cli创建项目&#xff1a;vue create my-project(项目名)--…...

JVM面试专题

目录 1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 1.2 什么是程序计数器&#xff1f; 1.3 你能给我详细的介绍Java堆吗? 元空间(MetaSpace)介绍 1.4 什么是虚拟机栈 1.5 方法区 1.5.1 概述 1.5.2 常量池 1.5.3 运行时常量池 1.6 你听过…...

齐次线性方程组及python求解

齐次线性方程组的概念 齐次线性方程组是指所有常数项都为零的线性方程组&#xff0c;其一般形式为&#xff1a; a 11 x 1 a 12 x 2 ⋯ a 1 n x n 0 a_{11}x_1 a_{12}x_2 \cdots a_{1n}x_n 0 a11​x1​a12​x2​⋯a1n​xn​0 a 21 x 1 a 22 x 2 ⋯ a 2 n x n 0 a_…...

鸿蒙前后端项目源码-点餐v3.0-原创!原创!原创!

鸿蒙前后端点餐项目源码含文档ArkTS语言. 原创作品.我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作…...

【数据结构】算法效率的双刃剑:时间复杂度与空间复杂度

前言 在算法的世界里&#xff0c;效率是衡量算法优劣的关键标准。今天&#xff0c;就让我们深入探讨算法效率的两个核心维度&#xff1a;时间复杂度和空间复杂度&#xff0c;帮助你在算法设计的道路上更进一步。 一、算法效率&#xff1a;衡量算法好坏的关键 算法的效率主要…...

Linux | I.MX6ULL 终结者底板原理图讲解(5)

01 USB 转串口电路 I.MX6ULL 终结者开发板板载了一个 USB 串口,原理图如图 1 和图 2 所示: USB 转串口我们使用的是 CH340G 芯片,该芯片是由南京沁恒微电子研发生产的一款国产芯片。CH340G的工作电压支持 3.3V、5V,甚至是 3V,从上图可以看到我们给 CH340G 的电压是 5V…...

java拆分字符串、去重并统计相关长度

java拆分字符串、去重并统计相关长度 20250331 19:52 求取逗号隔开的字符串的 的长度&#xff0c;要求去重。拆分字符串应该是指按照某种分隔符将字符串分割成多个部分&#xff0c;然后去除重复的部分&#xff0c;最后统计处理后各个部分的长度或者总长度。 这时候可能需要明确…...

Vue 2 和 Vue 3 有什么区别

Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本&#xff0c;它们在核心特性、性能、API 设计等方面有一些显著的区别。以下是它们的主要区别&#xff1a; 1. 核心特性 • Composition API&#xff1a; • Vue 3 引入了 Composition API&#xff0c;这是一种新的 API&#xff0…...

RabbitMQ、RocketMQ 和 Kafka 的消息特性对比

以下是 RabbitMQ、RocketMQ 和 Kafka 在保证消息不丢失、消息顺序、消息幂等性以及快速处理积压方面的详细对比&#xff1a; 1. 消息不丢失 特性RabbitMQRocketMQKafka生产者端开启事务或 Confirm 模式使用事务消息机制设置 acksall 确保消息被所有副本确认服务端消息持久化&…...

Logback 实现不同包的日志记录到不同文件

核心 通过合理配置多个 appender 来定义不同的日志输出目的地通过 logger 元素将不同的包与对应的 appender 关联起来同时利用 additivity 属性控制日志的传递&#xff0c;从而实现精准的日志输出管理。 additivity 属性控制日志传递&#xff1a; additivity 属性决定了该 l…...

【附JS、Python、C++题解】Leetcode面试150题(11)H指数

一、题目 274. H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xf…...

C++第13届蓝桥杯省b组习题笔记

1.九进制转十进制 九进制正整数 (2022)9转换成十进制等于多少&#xff1f; 第一位乘9的0次方&#xff0c;第二位乘9的1次方&#xff0c;第三位乘9的二次方以此类推 #include <iostream> using namespace std;int main() {// 请在此输入您的代码int t2022;int res0;int c…...

【学Rust写CAD】19 颜色渐变定义(gradient_stop.rs)

源码 //color/gradient_stop.rs use super::argb::Color; #[derive(Clone, Copy, Debug)] pub struct GradientStop {pub position: f32,pub color: Color, }代码分析 这段代码是一个结构体&#xff08;struct&#xff09;&#xff0c;并为其派生&#xff08;derive&#xff…...

从零开始跑通3DGS教程:介绍

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章&#xff0c;将实现从原始图像(有序、无序)数据开始&#xff0c;经过处理(视频抽帧成有序)&#xff0c;SFM&#xff0c;3DGS训练、编辑、渲染等步骤&#xff0c;完整地呈现从原始图像到新视角合成的全部流程&#x…...

探索 Python 编程的宇宙:从基础到进阶的奇妙之旅

在当今的编程世界里&#xff0c;Python 以其简洁、易读和强大的功能&#xff0c;成为了众多开发者的心头好。它就像一个充满无限可能的宇宙&#xff0c;吸引着人们不断去探索其中的奥秘。今天&#xff0c;让我们一起踏上这场 Python 编程的奇妙之旅&#xff0c;从基础到进阶&am…...

使用 Spring AI 和 LangChain4j 实现聊天机器人对比分析

人工智能领域正在彻底改变公司管理客户服务的方式。随着 Spring AI 和 LangChain4j 等专用框架的出现&#xff0c;Java 开发人员现在拥有强大的工具来实现能够从公司数据中学习的智能聊天机器人。在本文中&#xff0c;我们将探讨这两个框架的主要功能&#xff0c;并了解如何使用…...

3月31(信息差)

1.全国首个!湖北为脑机接口医疗服务定价 据湖北省医疗保障局消息,今日,湖北省医保局发布全国首个脑机接口医疗服务价格,其中,侵入式脑机接口植入费6552 元/次,侵入式脑机接口取出费3139元/次,非侵入式脑机接口适配费966元/次,标志着这一前沿科技正式步入民生领域,为无…...