前端利器:DateUtils 日期时间工具深度剖析
序言
在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils
,它涵盖了从基础的日期格式化到高级的日期范围计算等一系列实用功能。
一、工具类概述
DateUtils
是一个功能丰富的日期时间工具集合,它为开发者提供了便捷的方式来处理各种日期和时间相关的操作。该工具类依赖于一个辅助工具 TypeUtils
中的 isDate
方法来进行日期对象的有效性验证。通过枚举定义了多种常见的日期格式,并且提供了一系列方法来实现日期的格式化、解析、相对时间获取、日期范围计算、日期加减、差值计算等功能。
二、核心功能解析
(一)日期格式化
- FORMAT 枚举
DateUtils
首先定义了一个FORMAT
枚举,它包含了多种常用的日期格式,如DATE
(YYYY - MM - DD
)、TIME
(HH:mm:ss
)、DATETIME
(YYYY - MM - DD HH:mm:ss
)等,涵盖了中文和英文的常见格式,方便开发者在不同场景下选择合适的格式。 - format 方法
format(date: Date, format: string = this.FORMAT.DATETIME): string {if (!TypeUtils.isDate(date)) {throw new Error("无效的日期对象!");}const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();const hours = date.getHours();const minutes = date.getMinutes();const seconds = date.getSeconds();return format.replace("YYYY", year.toString()).replace("MM", month.toString().padStart(2, "0")).replace("DD", day.toString().padStart(2, "0")).replace("HH", hours.toString().padStart(2, "0")).replace("mm", minutes.toString().padStart(2, "0")).replace("ss", seconds.toString().padStart(2, "0"));
}
该方法接收一个 Date
对象和一个可选的格式字符串作为参数。如果未传入格式字符串,则默认使用 DATETIME
格式。首先通过 TypeUtils.isDate
方法验证日期对象的有效性,然后从 Date
对象中提取年、月、日、时、分、秒等信息,最后通过字符串替换的方式将占位符替换为实际的日期时间值,实现日期的格式化。
(二)日期解析
parse
方法用于将日期字符串解析为 Date
对象。
parse(dateStr: string): Date {const date = new Date(dateStr);if (isNaN(date.getTime())) {throw new Error("无效的日期字符串!");}return date;
}
该方法尝试使用 Date
构造函数将传入的字符串解析为日期对象。如果解析后的日期对象的 getTime
方法返回 NaN
,则说明解析失败,抛出“无效的日期字符串!”错误。
(三)相对时间获取
getRelativeTime
方法用于获取相对于当前时间的日期描述。
getRelativeTime(date: Date): string {const now = new Date();const diff = now.getTime() - date.getTime();const minutes = Math.floor(diff / (1000 * 60));const hours = Math.floor(diff / (1000 * 60 * 60));const days = Math.floor(diff / (1000 * 60 * 60 * 24));if (minutes < 1) return "刚刚";if (minutes < 60) return `${minutes}分钟前`;if (hours < 24) return `${hours}小时前`;if (days < 30) return `${days}天前`;return this.format(date, this.FORMAT.DATE);
}
该方法首先计算当前时间与传入日期之间的时间差,然后根据时间差的大小返回不同的相对时间描述。如果时间差小于 1 分钟,返回“刚刚”;如果小于 60 分钟,返回“X 分钟前”;如果小于 24 小时,返回“X 小时前”;如果小于 30 天,返回“X 天前”;否则,返回格式化后的日期字符串。
(四)日期范围获取
getDateRange
方法用于获取指定类型(周、月、年)的日期范围。
getDateRange(type: "week" | "month" | "year"): [Date, Date] {const now = new Date();let start: Date, end: Date;switch (type) {case "week":const day = now.getDay() || 7;start = new Date(now.setDate(now.getDate() - day + 1));end = new Date(now.setDate(now.getDate() + 6));break;case "month":start = new Date(now.getFullYear(), now.getMonth(), 1);end = new Date(now.getFullYear(), now.getMonth() + 1, 0);break;case "year":start = new Date(now.getFullYear(), 0, 1);end = new Date(now.getFullYear(), 11, 31);break;}return [start, end];
}
该方法根据传入的类型参数,通过 switch
语句分别计算本周、本月、本年的起止日期。例如,对于“week”类型,先获取当前日期是一周中的第几天(周日为 0,这里处理为 7),然后计算本周的起始日期和结束日期。
(五)日期加减
add
方法用于对日期进行加减操作。
add(date: Date,amount: number,unit: "year" | "month" | "day" | "hour" | "minute" | "second"
): Date {const result = new Date(date);switch (unit) {case "year":result.setFullYear(result.getFullYear() + amount);break;case "month":result.setMonth(result.getMonth() + amount);break;case "day":result.setDate(result.getDate() + amount);break;case "hour":result.setHours(result.getHours() + amount);break;case "minute":result.setMinutes(result.getMinutes() + amount);break;case "second":result.setSeconds(result.getSeconds() + amount);break;}return result;
}
该方法接收一个 Date
对象、一个数值和一个时间单位作为参数。通过 switch
语句根据不同的时间单位,对日期对象进行相应的加减操作,并返回新的日期对象。
(六)日期差值计算
diff
方法用于计算两个日期之间的差值。
diff(date1: Date,date2: Date,unit: "year" | "month" | "day" | "hour" | "minute" | "second"
): number {const diff = date2.getTime() - date1.getTime();switch (unit) {case "year":return date2.getFullYear() - date1.getFullYear();case "month":return ((date2.getFullYear() - date1.getFullYear()) * 12 +date2.getMonth() -date1.getMonth());case "day":return Math.floor(diff / (1000 * 60 * 60 * 24));case "hour":return Math.floor(diff / (1000 * 60 * 60));case "minute":return Math.floor(diff / (1000 * 60));case "second":return Math.floor(diff / 1000);default:return diff;}
}
该方法接收两个 Date
对象和一个时间单位作为参数。首先计算两个日期的时间戳差值,然后根据不同的时间单位,通过 switch
语句进行相应的计算,返回两个日期之间的差值。
(七)工作日判断
isWorkday
方法用于判断一个日期是否为工作日。
isWorkday(date: Date): boolean {const day = date.getDay();return day!== 0 && day!== 6;
}
该方法通过获取日期是一周中的第几天(周日为 0,周六为 6),判断该日期是否既不是周日也不是周六,从而确定是否为工作日。
(八)月份天数获取
getDaysInMonth
方法用于获取指定月份的天数。
getDaysInMonth(year: number, month: number): number {return new Date(year, month, 0).getDate();
}
该方法通过创建一个指定年份和月份的 Date
对象,并将日期设置为 0,此时 getDate
方法返回的就是该月份的总天数。
(九)闰年判断
isLeapYear
方法用于判断指定年份是否为闰年。
isLeapYear(year: number): boolean {return (year % 4 === 0 && year % 100!== 0) || year % 400 === 0;
}
该方法根据闰年的定义,即能被 4 整除且不能被 100 整除,或者能被 400 整除的年份为闰年,返回相应的布尔值。
(十)获取日期是当年的第几周
getWeekOfYear
方法用于获取指定日期是当年的第几周。
getWeekOfYear(date: Date): number {const start = new Date(date.getFullYear(), 0, 1);const diff =date.getTime() -start.getTime() +(start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;const oneWeek = 1000 * 60 * 60 * 24 * 7;return Math.floor(diff / oneWeek) + 1;
}
该方法首先获取当年的第一天,然后计算指定日期与当年第一天的时间差,并考虑了时区偏移量。最后将时间差除以一周的毫秒数,并向上取整加 1,得到该日期是当年的第几周。
(十一)获取时间戳
getTimestamp
方法用于获取指定日期的时间戳,如果未传入日期,则返回当前日期的时间戳。
getTimestamp(date: Date = new Date()): number {return date.getTime();
}
该方法通过调用 Date
对象的 getTime
方法获取时间戳。
三. 工具类功能详解
(一) 日期格式化
方法说明:format
方法用于将Date
对象格式化为指定的字符串格式。它支持多种预定义的格式,如YYYY-MM-DD
、HH:mm:ss
等,也支持自定义格式字符串。
使用示例:
const date = new Date('2024-03-21 14:30:00');
DateUtils.format(date); // "2024-03-21 14:30:00"
DateUtils.format(date, DateUtils.FORMAT.DATE); // "2024-03-21"
DateUtils.format(date, DateUtils.FORMAT.DATE_CN); // "2024年03月21日"
DateUtils.format(date, 'YYYY/MM/DD'); // "2024/03/21"
(二)日期解析
方法说明:parse
方法用于将日期字符串解析为Date
对象。无论是标准的ISO格式还是中文格式,都可以轻松解析。
使用示例:
DateUtils.parse('2024-03-21'); // Date 对象
DateUtils.parse('2024-03-21 14:30:00'); // Date 对象
DateUtils.parse('2024年03月21日'); // Date 对象
(三)相对时间描述
方法说明:getRelativeTime
方法可以根据当前时间生成相对时间描述,如“刚刚”、“5分钟前”、“2小时前”等。
使用示例:
const date = new Date('2024-03-21 14:30:00');
DateUtils.getRelativeTime(date); // "刚刚"、"5分钟前"、"2小时前"、"3天前"等
(四) 日期范围获取
方法说明:getDateRange
方法可以方便地获取本周、本月、今年的起止日期。
使用示例:
// 获取本周的起止日期
const [weekStart, weekEnd] = DateUtils.getDateRange('week');// 获取本月的起止日期
const [monthStart, monthEnd] = DateUtils.getDateRange('month');// 获取今年的起止日期
const [yearStart, yearEnd] = DateUtils.getDateRange('year');
(五)日期加减
方法说明:add
方法支持对日期进行加减操作,支持年、月、日、时、分、秒等多种单位。
使用示例:
const date = new Date('2024-03-21');// 加一天
DateUtils.add(date, 1, 'day'); // 返回 2024-03-22// 减一个月
DateUtils.add(date, -1, 'month'); // 返回 2024-02-21// 加一年
DateUtils.add(date, 1, 'year'); // 返回 2025-03-21
(六)日期差值计算
方法说明:diff
方法可以计算两个日期之间的差值,支持年、月、日、时、分、秒等多种单位。
使用示例:
const date1 = new Date('2024-03-21');
const date2 = new Date('2024-03-25');DateUtils.diff(date1, date2, 'day'); // 返回 4
DateUtils.diff(date1, date2, 'hour'); // 返回 96
(七) 工作日判断
方法说明:isWorkday
方法可以判断某个日期是否为工作日(周一至周五)。
使用示例:
const date = new Date('2024-03-21');
DateUtils.isWorkday(date); // 返回 true (周四)
DateUtils.isWorkday(new Date('2024-03-23')); // 返回 false (周六)
(八) 获取月份天数
方法说明:getDaysInMonth
方法可以获取指定年份和月份的天数,支持闰年判断。
使用示例:
DateUtils.getDaysInMonth(2024, 2); // 返回 29 (闰年2月)
DateUtils.getDaysInMonth(2024, 3); // 返回 31
(九) 闰年判断
方法说明:isLeapYear
方法可以判断某一年是否为闰年。
使用示例:
DateUtils.isLeapYear(2024); // 返回 true
DateUtils.isLeapYear(2023); // 返回 false
(十) 获取日期是当年的第几周
方法说明:getWeekOfYear
方法可以获取某个日期是当年的第几周。
使用示例:
DateUtils.getWeekOfYear(new Date('2024-03-21')); // 返回周数
(十一) 获取时间戳
方法说明:getTimestamp
方法可以获取当前时间或指定日期的时间戳。
使用示例:
DateUtils.getTimestamp(); // 返回当前时间戳
DateUtils.getTimestamp(new Date('2024-03-21')); // 返回指定日期的时间戳
四、总结
DateUtils
工具类为前端开发者提供了一个全面且强大的日期时间处理解决方案。无论是在数据展示、数据分析还是业务逻辑处理中,这些功能都能极大地提高开发效率,减少日期时间处理过程中的错误。通过合理运用这些方法,开发者可以更加专注于业务逻辑的实现,而无需在基础的日期时间操作上花费过多精力。希望本文对 DateUtils
的剖析能帮助你更好地理解和运用这个工具类,在前端开发中更加得心应手地处理日期和时间相关的任务。
相关文章:
前端利器:DateUtils 日期时间工具深度剖析
序言 在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils,它涵盖了从基础的日…...
Denoising Diffusion Restoration Models论文解读
论文要点 恢复的线性逆问题可以使用预训练的DDPM完成:1. 将降质矩阵使用SVD,得到分解矩阵;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多,比如后续的DDNM、…...
【Windows API】SetFilePointerEx函数用法介绍
目录 一、函数概述 二、函数原型与参数解析 1. hFile(文件句柄) 2. liDistanceToMove(移动距离) 3. lpNewFilePointer(新指针位置) 4. dwMoveMethod(移动基准点) 三、返回值与…...
uniapp uni.request重复请求处理
类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…...
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
Windows安装node.js详细教程
一、什么是node.js Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台,它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。 由 Rya…...
大模型领域常见的专业术语和关键词及简要解释
现在大语言模型非常火热,特别是deepseek,想要了解、学习、应用、设计开发大模型,则我们需要先知道大模型邻域都包含哪些方面,以及在大模型领域的各个方面,都有哪些常见的专业术语和关键词。 以下我们从大模型领域的模型架构、训练方法到优化技术、应用和伦理问题等多个方…...
单细胞转录组画小提琴VlnPlot只显示需要类型细胞
探序基因肿瘤研究院 整理 在R语言中,单细胞转录组数据画小提琴图中,我们如果想只展示出需要的特定细胞类型,可以把这需要展示的细胞类型单独构建成一个Seurat对象,再画图。 例如我们在Seurat对象中的meta.data表格中,…...
UE 播放视频
一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...
当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
当pcie设备变化时centos是否会修改网络设备的名称 在CentOS(以及其他基于Linux的操作系统)中,网络接口的命名通常遵循特定的规则,尤其是在使用PCIe设备(如网络适配器)时。网络接口的命名通常基于设备的物理…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
《养生》(二)
一、基础生活调整 1.作息规律 固定每天7-8小时睡眠,尽量22:30前入睡,晨起后拉开窗帘晒太阳5分钟,调节生物钟 2.饮食优化 三餐定时,每餐细嚼慢咽20次以上,优先吃蔬菜和蛋白质(如鸡蛋、豆腐&#x…...
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下,Space 名称中需要包含 MindSearch 关键词,请在必要的步骤以及成功的对话测试结果当中 实现过程如下: 2.1 MindSearch 简…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
Ansys Motor-CAD:热分析
您好,汽车迷: 在这篇博客中,我将讨论如何使用 Ansys Motor-CAD 中的热物理模型对 IPM 电机进行热分析。我展示了可以应用的各种冷却系统,并演示了一些计算方法,包括稳态、简单瞬态和占空比。 热物理和设置 选择热物理…...
Swagger 转 Word 技术方案
项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...
对CSS了解哪些?
CSS(Cascading Style Sheets,层叠样式表)是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围: 1. CSS 基础 选择器:如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...
【C语言】指针(5)
前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…...
go~为什么会有json.Number这种类型存在
解决 JSON 数值类型的不确定性 在 JSON 格式里,数值类型没有明确区分整数和浮点数,一个数值可能是整数(如 123),也可能是浮点数(如 123.45)。而在 Go 语言中,整数(如 in…...
Jmeter连接数据库、逻辑控制器、定时器
Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进来 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter 配置数据库连接信…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
20250220找回Ubuntu22.04中丢失的文件管理器
20250220找回Ubuntu22.04中丢失的文件管理器 2025/2/20 18:05 在Ubuntu20.04.6中 生产服务器上 强制安装deb安装包的时候,把 桌面显示搞丢了。 Ubuntu的桌面用得少,但是没有还是挺不方便的,一通操作,桌面回来了。还是有很多/不少功…...
IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
目录 什么叫以太网?它与因特网有何区别?公板实现以太网的原理介绍(MII/RMII协议介绍)公板的原理图下载地址公板中IMX6ULL处理器与MAC(以太网控制器)有关的原理图IMX6ULL处理器的MAC引脚说明1. **ENET1_TX_DATA0**2. **ENET1_TX_DATA1**3. **ENET1_TX_EN*…...
一周学会Flask3 Python Web开发-request请求对象与url传参
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息,我们可以从中获取所有数据。 request对象包含的常用属性&…...
2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略&…...
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
C# 十六进制字符串转换为十进制
在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法: 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
Qt 保留小数点 固定长度 QString 格式化
QString的arg()函数格式化输出double类型数值,包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符,以及字段宽度的影响。文中提到,当fieldWidth小于实际长度时,前面的填充不会被截断。此外&am…...
亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
作者:程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么,今天,给…...
AI训练中的常用指令
以下是一些常用于深度学习训练的 Linux 指令,可以帮助你高效管理和执行训练任务: 文件管理 查看当前目录内容:ls进入目录:cd 路径/到/目录创建新目录:mkdir 新目录名称删除文件或目录: 删除文件ÿ…...
汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%
汽车同轴供电(PoC)系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用,如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途,包括能量存储:电感器…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
强化学习笔记
强化学习的总体目标:寻找最优策略。 关键名词 智能体(Agent) 状态(State):智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间(State space):把所有状态放在一起&…...
【个人记录】openEuler安装K3S并配置为GPU节点
前言 国内网络环境特殊,在线安装比较麻烦,K3S采用离线安装方式进行部署。 安装整体思路是: 安装GPU驱动安装CUDA工具安装nvidia容器运行时安装K3S设置K3S使用GPU 基础环境 采用All In One方式(其实只有一张GPU卡)部…...
SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…...
Linux系统中常见的词GNU是什么意思?
GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…...
Revit API:对元素过滤的三点思考
一、为什么要对元素进行过滤? 提高效率:Revit模型可能包含成千上万的元素,直接对所有元素进行操作会非常耗时。通过过滤,可以只选择需要处理的元素,从而提高代码的执行效率。 精准控制:通过过滤࿰…...
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
计算机网络之TCP的可靠传输
上一篇内容可能比较多,显得比较杂乱,这一篇简单总结一下TCP是靠什么实现可靠传输的吧。 校验和 TCP是端到端的传输,由发送方计算校验和,接收方进行验证,目的是为了验证TCP首部和数据在发送过程中没有任何改动&#x…...
linux 驱动编程配置(minis3c2440)
1.介绍 1. 启动过程:启动u-boot------>>启动linux内核----->>挂载根文件系统 2. uboot是一个裸机程序,是一个bootloader,用于启动linux系统以及系统初始化 ubootloader主要完成了哪些任务:1. 初始化异常向量表&a…...
数据库基础1
MySQL在C语言中的操作步骤 C语言操作MySQL的基本流程如下: 引入MySQL头文件初始化MySQL连接连接到MySQL服务器执行SQL语句获取查询结果处理查询结果释放结果集和连接 数据库中有哪些约束规则 1.主键约束 promary key 具有唯一且非空 2.外键约束 foreign key 3.非…...
Redis文档总结
文档:https://redis.com.cn/topics/why-use-redis.html 1.我们为什么一定要用 Redis 呢? 速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争…...
论文笔记(七十二)Reward Centering(二)
Reward Centering(二) 文章概括摘要2 简单的奖励中心 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...
25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...
ASUS/华硕无畏16 X1605VA 原厂Win11 22H2系统 工厂文件 带ASUS Recovery恢复
华硕工厂文件恢复系统 ,安装结束后带隐藏分区,带一键恢复,以及机器所有的驱动和软件。 支持型号:X1605VA 系统版本:Windows 11 22H2 文件下载:点击下载 文件格式:工厂文件 安装教程&#x…...
DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑
DeepSeek作为一款前沿的人工智能大模型,凭借其强大的多模态理解、知识推理和内容生成能力,正在重构文旅产业的发展逻辑,推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构:打造全域感知的智…...
自学FOC系列分享--SVPWM和clark 逆变换及代码实战
自学FOC系列分享--SVPWM和clark 逆变换 1 说在前面2 回顾clarke 和 park的变换和逆变换2.1 概述2.2 公式说明 3 SVPWM是如何写的3.1 简单说明3.2 重要对比 4、代码实战4.1 代码构成说明4.2 全部代码4.3 测试代码4.4 测试结果4.5 结果分析 总结 1 说在前面 如前一篇文章所述的系…...
LeetCode-524. 通过删除字母匹配到字典里最长单词
1、题目描述: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在&#x…...