目录

时间日期工具类DateTimeHelper

功能说明

日期格式化

时间戳转换

时间间隔计算

日期边界与调整

时区转换

日期解析

时间相等性判断

时间范围与先后判断

日期合法性与特殊判断

截断时间到指定精度

完整代码


     本篇文章分享一下时间日期工具类DateTimeHelper,包含了时间日期的常用操作,使用该类更便捷地完成时间相关的操作。

时间日期工具类DateTimeHelper

功能说明

日期格式化

       提供多种日期字符串转换方法,包括纯数字格式(如20240101)、日志格式(如[yyyy/MM/dd HH:mm:ss])、自定义格式转换,以及带星期的日期格式(如2024年01月01日 星期一)。

时间戳转换

       实现 DateTime 与 Unix 时间戳的双向转换,支持秒级和毫秒级精度,包括直接转换和安全转换(异常时返回 null)。

时间间隔计算

       计算两个时间的间隔,支持秒、毫秒、天数(忽略时间部分)和月份差(按自然月计算),结果可为负数。

日期边界与调整

       获取指定日期的天 / 月起始与结束时间(如2024-01-01 00:00:00和2024-01-31 23:59:59.999),并支持对日期进行年、月、日、时、分、秒的加减调整。

时区转换

       提供本地时间与 UTC 时间的双向转换,自动处理不同DateTimeKind的时间类型。

日期解析

       支持按指定格式或多个可能格式将字符串转换为 DateTime,转换失败时返回 null。

时间相等性判断

       可判断两个时间是否完全相同(精确到毫秒),或按指定精度(年、月、日等)判断是否相同,还提供同年、同月、同日的快捷判断。

时间范围与先后判断

       判断时间是否在指定范围内(含边界),比较两个时间的先后关系(早于、晚于),并返回比较结果(1/-1/0)。

日期合法性与特殊判断

       验证日期是否为有效 DateTime 实例,判断年份是否为闰年,以及指定日期是否为当月第一天或最后一天。

截断时间到指定精度

       按指定精度(年、月、日、时等)截断时间,忽略更低精度的部分(如截断到 “小时” 则分钟和秒设为 0)。

完整代码

using System;
using System.Globalization;/// <summary>
/// 日期时间工具类,提供格式化、转换等常用操作
/// </summary>
public static class DateTimeHelper
{#region 日期格式化/// <summary>/// 日期 仅数字格式(如20240101)/// </summary>public static string DateOnlyNum(DateTime dateTime){return dateTime.ToString("yyyy/MM/dd").Replace("/", "");}/// <summary>/// 格式化日志时间 [yyyy/MM/dd HH:mm:ss]/// </summary>public static string DateLogFormat(DateTime dateTime){return $"[{dateTime:yyyy/MM/dd HH:mm:ss}] ";}/// <summary>/// 根据格式返回日期字符串(默认格式:yyyy/MM/dd HH:mm:ss)/// </summary>/// <param name="dateTime">待格式化的时间</param>/// <param name="format">格式字符串(如"yyyy-MM-dd")</param>/// <returns>格式化后的字符串</returns>public static string GetDateTimeStringByFormat(DateTime dateTime, string format = "yyyy/MM/dd HH:mm:ss"){return dateTime.ToString(format);}/// <summary>/// 将日期转换为带星期的格式(如:2024年01月01日 星期一)/// </summary>/// <param name="dateTime">待格式化的日期</param>/// <returns>带星期的日期字符串</returns>public static string GetDateWithWeek(DateTime dateTime){//中文星期名称映射(默认CultureInfo为中文时,DayOfWeek对应的值可直接转换)var weekNames = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };return $"{dateTime:yyyy年MM月dd日} {weekNames[(int)dateTime.DayOfWeek]}";}#endregion#region 时间戳转换/// <summary>/// DateTime转秒级时间戳(Unix时间戳:1970-01-01 00:00:00 UTC起的秒数)/// </summary>public static long DateTimeToTimestampSeconds(DateTime dateTime){DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);DateTime targetUtcTime = dateTime.ToUniversalTime();return (long)(targetUtcTime - unixStartTime).TotalSeconds;}/// <summary>/// DateTime转毫秒级时间戳(Unix时间戳:1970-01-01 00:00:00 UTC起的毫秒数)/// </summary>public static long DateTimeToTimestampMilliseconds(DateTime dateTime){DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);DateTime targetUtcTime = dateTime.ToUniversalTime();return (long)(targetUtcTime - unixStartTime).TotalMilliseconds;}/// <summary>/// 秒级时间戳转DateTime(直接返回本地时间,不处理异常)/// </summary>public static DateTime SecondsTimestampToDateTime(long timestampSeconds){DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);return unixStartTime.AddSeconds(timestampSeconds).ToLocalTime();}/// <summary>/// 毫秒级时间戳转DateTime(直接返回本地时间,不处理异常)/// </summary>public static DateTime MillisecondsTimestampToDateTime(long timestampMilliseconds){DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);return unixStartTime.AddMilliseconds(timestampMilliseconds).ToLocalTime();}/// <summary>/// 秒级时间戳转DateTime(安全转换,异常时返回null)/// </summary>public static DateTime? SecondsTimestampToDateTimeNull(long seconds){if (seconds <= 0) return null;try{DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);return unixStartTime.AddSeconds(seconds).ToLocalTime();}catch (ArgumentOutOfRangeException)//时间戳过大导致溢出{return null;}}/// <summary>/// 毫秒级时间戳转DateTime(安全转换,异常时返回null)/// </summary>public static DateTime? MillisecondsTimestampToDateTimeNull(long milliseconds){if (milliseconds <= 0) return null;try{DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);return unixStartTime.AddMilliseconds(milliseconds).ToLocalTime();}catch (ArgumentOutOfRangeException)//时间戳过大导致溢出{return null;}}#endregion#region 时间间隔计算/// <summary>/// 获取两个时间的间隔秒数(dateTime1 - dateTime2的秒数差,可为负数)/// </summary>public static long GetTimestampSecondsInterval(DateTime dateTime1, DateTime dateTime2){return (long)(dateTime1 - dateTime2).TotalSeconds;}/// <summary>/// 获取两个时间的间隔毫秒数(dateTime1 - dateTime2的毫秒数差,可为负数)/// </summary>public static long GetTimestampMillisecondsInterval(DateTime dateTime1, DateTime dateTime2){return (long)(dateTime1 - dateTime2).TotalMilliseconds;}/// <summary>/// 获取两个日期之间的总天数(忽略时间部分,dateTime1 - dateTime2的天数差)/// </summary>/// <param name="dateTime1">结束日期</param>/// <param name="dateTime2">开始日期</param>/// <returns>天数差(可为负数)</returns>public static int GetDayInterval(DateTime dateTime1, DateTime dateTime2){//截断时间部分,仅保留日期DateTime date1 = dateTime1.Date;DateTime date2 = dateTime2.Date;return (int)(date1 - date2).TotalDays;}/// <summary>/// 获取两个日期之间的月份差(按自然月计算,如2024-03-01与2024-01-15的差为2)/// </summary>/// <param name="dateTime1">结束日期</param>/// <param name="dateTime2">开始日期</param>/// <returns>月份差(可为负数)</returns>public static int GetMonthInterval(DateTime dateTime1, DateTime dateTime2){int months = (dateTime1.Year - dateTime2.Year) * 12 + dateTime1.Month - dateTime2.Month;//若结束日期的天数小于开始日期,需减1(如2024-02-28与2024-01-31,实际不足1个月)if (dateTime1.Day < dateTime2.Day){months--;}return months;}#endregion#region 日期边界与调整/// <summary>/// 获取指定日期所在天的开始时间(如2024-01-01 00:00:00.000)/// </summary>public static DateTime GetDayStart(DateTime dateTime){return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0, 0);}/// <summary>/// 获取指定日期所在天的结束时间(如2024-01-01 23:59:59.999)/// </summary>public static DateTime GetDayEnd(DateTime dateTime){return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 23, 59, 59, 999);}/// <summary>/// 获取指定日期所在月的开始时间(如2024-01-01 00:00:00.000)/// </summary>public static DateTime GetMonthStart(DateTime dateTime){return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);}/// <summary>/// 获取指定日期所在月的结束时间(如2024-01-31 23:59:59.999)/// </summary>public static DateTime GetMonthEnd(DateTime dateTime){// 获取当月最后一天(下个月1号减1天)DateTime nextMonthFirstDay = new DateTime(dateTime.Year, dateTime.Month, 1).AddMonths(1);return nextMonthFirstDay.AddDays(-1).AddTicks(-1); //减1 tick确保是当月最后一刻}/// <summary>/// 调整日期(加减年/月/日/时/分/秒)/// </summary>/// <param name="dateTime">原日期</param>/// <param name="years">年数(正数加,负数减)</param>/// <param name="months">月数(正数加,负数减)</param>/// <param name="days">天数(正数加,负数减)</param>/// <param name="hours">小时数(正数加,负数减)</param>/// <param name="minutes">分钟数(正数加,负数减)</param>/// <param name="seconds">秒数(正数加,负数减)</param>/// <returns>调整后的日期</returns>public static DateTime AddDateTime(DateTime dateTime, int years = 0, int months = 0, int days = 0, int hours = 0, int minutes = 0, int seconds = 0){return dateTime.AddYears(years).AddMonths(months).AddDays(days).AddHours(hours).AddMinutes(minutes).AddSeconds(seconds);}#endregion#region 时区转换/// <summary>/// 将本地时间转换为UTC时间/// </summary>/// <param name="localTime">本地时间</param>/// <returns>UTC时间(带DateTimeKind.Utc标记)</returns>public static DateTime LocalTimeToUtc(DateTime localTime){if (localTime.Kind == DateTimeKind.Utc)//若已是UTC时间,直接返回{return localTime;}return TimeZoneInfo.ConvertTimeToUtc(localTime, TimeZoneInfo.Local);}/// <summary>/// 将UTC时间转换为本地时间/// </summary>/// <param name="utcTime">UTC时间</param>/// <returns>本地时间(带DateTimeKind.Local标记)</returns>public static DateTime UtcToLocalTime(DateTime utcTime){if (utcTime.Kind == DateTimeKind.Local)//若已是本地时间,直接返回{return utcTime;}return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local);}#endregion#region 日期解析/// <summary>/// 将字符串按指定格式转换为DateTime(失败返回null)/// </summary>/// <param name="dateTimeString">日期字符串(如"2024/01/01 12:30:45")</param>/// <param name="format">解析格式(如"yyyy/MM/dd HH:mm:ss")</param>/// <returns>转换后的DateTime?,失败返回null</returns>public static DateTime? GetDateTimeByFormat(string dateTimeString, string format = "yyyy/MM/dd HH:mm:ss"){if (string.IsNullOrWhiteSpace(dateTimeString)) return null;//调用单格式重载:TryParseExact(string s, string format, ...)bool success = DateTime.TryParseExact(dateTimeString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result);if (success) return result;return null;}/// <summary>/// 将字符串按多个可能格式尝试转换为DateTime(失败返回null)/// </summary>/// <param name="dateTimeString">日期字符串(如"20240101"或"2024-01-01")</param>/// <param name="formats">可能的解析格式列表,/// 不填为 "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss", "yyyyMMdd", "yyyyMMddHHmmss"</param>/// <returns>转换后的DateTime?,所有格式均失败则返回null</returns>public static DateTime? GetDateTimeByFormats(string dateTimeString, string[] formats = null){if (string.IsNullOrWhiteSpace(dateTimeString) || formats == null || formats.Length == 0) return null;if (formats == null) formats = new string[] { "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss", "yyyyMMdd", "yyyyMMddHHmmss" };//调用多格式重载:TryParseExact(string s, string[] formats, ...)bool success = DateTime.TryParseExact(dateTimeString, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result);if (success) return result;return null;}#endregion#region 时间相等性判断/// <summary>/// 判断两个时间是否完全相同(精确到毫秒,基于Ticks值)/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <returns>true=完全相同;false=不同</returns>public static bool IsSameDateTime(DateTime dateTime1, DateTime dateTime2){//Ticks以100纳秒为单位,可精确到毫秒级(1毫秒=10000 Ticks)return dateTime1.Ticks == dateTime2.Ticks;}/// <summary>/// 判断两个时间是否相同(可指定比较精度,忽略更低精度部分)/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <param name="precision">比较精度(如Year/Month/Day等)</param>/// <returns>true=指定精度下相同;false=不同</returns>public static bool IsSameDateTime(DateTime dateTime1, DateTime dateTime2, DateTimePrecision precision){DateTime truncated1 = TruncateDateTime(dateTime1, precision);DateTime truncated2 = TruncateDateTime(dateTime2, precision);return truncated1 == truncated2;}/// <summary>/// 判断两个时间是否同年/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <returns>true=同年;false=不同年</returns>public static bool IsSameYear(DateTime dateTime1, DateTime dateTime2){return dateTime1.Year == dateTime2.Year;}/// <summary>/// 判断两个时间是否同月(含同年判断)/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <returns>true=同年同月;false=不同</returns>public static bool IsSameMonth(DateTime dateTime1, DateTime dateTime2){return dateTime1.Year == dateTime2.Year && dateTime1.Month == dateTime2.Month;}/// <summary>/// 判断两个时间是否同日(含同年同月判断)/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <returns>true=同年同月同日;false=不同</returns>public static bool IsSameDay(DateTime dateTime1, DateTime dateTime2){return dateTime1.Year == dateTime2.Year && dateTime1.Month == dateTime2.Month && dateTime1.Date == dateTime2.Date;//Date属性自动截断时分秒}#endregion#region 时间范围与先后判断/// <summary>/// 判断日期是否在指定时间范围内(含边界值)/// </summary>/// <param name="dateTime">待判断日期</param>/// <param name="minDateTime">范围最小值(下界)</param>/// <param name="maxDateTime">范围最大值(上界)</param>/// <returns>true=在范围内;false=超出范围</returns>public static bool DateTimeIsInRange(DateTime dateTime, DateTime minDateTime, DateTime maxDateTime){//先校验min和max的合法性(避免min > max导致逻辑错误)if (minDateTime > maxDateTime){(minDateTime, maxDateTime) = (maxDateTime, minDateTime); //交换值,确保min <= max}return dateTime >= minDateTime && dateTime <= maxDateTime;}/// <summary>/// 判断dateTime1是否早于dateTime2/// </summary>/// <param name="dateTime1">待比较时间</param>/// <param name="dateTime2">基准时间</param>/// <returns>true=dateTime1早于dateTime2;false=否则</returns>public static bool IsDateTimeBefore(DateTime dateTime1, DateTime dateTime2){return dateTime1 < dateTime2;}/// <summary>/// 判断dateTime1是否晚于dateTime2/// </summary>/// <param name="dateTime1">待比较时间</param>/// <param name="dateTime2">基准时间</param>/// <returns>true=dateTime1晚于dateTime2;false=否则</returns>public static bool IsDateTimeAfter(DateTime dateTime1, DateTime dateTime2){return dateTime1 > dateTime2;}/// <summary>/// 比较两个时间的先后关系/// </summary>/// <param name="dateTime1">第一个时间</param>/// <param name="dateTime2">第二个时间</param>/// <returns>1=dateTime1晚于dateTime2;-1=dateTime1早于dateTime2;0=两者相等</returns>public static int CompareDateTime(DateTime dateTime1, DateTime dateTime2){return DateTime.Compare(dateTime1, dateTime2);}#endregion#region 日期合法性与特殊判断/// <summary>/// 判断日期是否为有效DateTime实例(避免极端值)/// </summary>/// <param name="dateTime">待判断日期</param>/// <returns>true=有效;false=无效(如超出DateTime支持的范围)</returns>public static bool DateTimeIsValid(DateTime dateTime){//DateTime.MinValue=0001-01-01,MaxValue=9999-12-31,超出此范围为无效return dateTime >= DateTime.MinValue && dateTime <= DateTime.MaxValue;}/// <summary>/// 判断指定年份是否为闰年/// </summary>/// <param name="year">年份(如2024)</param>/// <returns>true=闰年;false=平年</returns>public static bool IsLeapYear(int year){//闰年规则:能被4整除且不能被100整除,或能被400整除return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}/// <summary>/// 判断指定日期是否为当月第一天/// </summary>/// <param name="dateTime">待判断日期</param>/// <returns>true=当月第一天;false=否则</returns>public static bool IsFirstDayOfMonth(DateTime dateTime){return dateTime.Day == 1;}/// <summary>/// 判断指定日期是否为当月最后一天/// </summary>/// <param name="dateTime">待判断日期</param>/// <returns>true=当月最后一天;false=否则</returns>public static bool IsLastDayOfMonth(DateTime dateTime){//当月最后一天 = 下月第一天减1天DateTime nextMonthFirstDay = new DateTime(dateTime.Year, dateTime.Month, 1).AddMonths(1);DateTime lastDayOfMonth = nextMonthFirstDay.AddDays(-1);return dateTime.Date == lastDayOfMonth.Date;}#endregion#region 截断时间到指定精度/// <summary>/// 截断时间到指定精度(忽略更低精度的部分)/// </summary>/// <param name="dateTime">待截断时间</param>/// <param name="precision">截断精度</param>/// <returns>截断后的时间</returns>private static DateTime TruncateDateTime(DateTime dateTime, DateTimePrecision precision){return precision switch{DateTimePrecision.Year => new DateTime(dateTime.Year, 1, 1),DateTimePrecision.Month => new DateTime(dateTime.Year, dateTime.Month, 1),DateTimePrecision.Day => dateTime.Date, //Date属性直接返回"年-月-日 00:00:00"DateTimePrecision.Hour => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0),DateTimePrecision.Minute => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0),DateTimePrecision.Second => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second),DateTimePrecision.Millisecond => dateTime, //保留毫秒级精度_ => dateTime //默认返回原时间};}#endregion
}
/// <summary>
/// 时间比较精度枚举
/// </summary>
public enum DateTimePrecision
{Year,       // 年Month,      // 月Day,        // 日Hour,       // 时Minute,     // 分Second,     // 秒Millisecond // 毫秒
}

       还可以参考Unity、C#常用的时间处理类

       好了,本次的分享到这里就结束啦,希望对你有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94597.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94597.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94597.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI AI一键换装工作流无私分享

1 模型文件准备 clip_l.safetensors &#xff1a;CLIP 文本编码器&#xff0c;将你的提示词转换为文本向量&#xff0c;用于指导图像生成。下载到text_encoderst5xxl_fp16.safetensors&#xff1a;处理复杂文本任务&#xff0c;如提示重写、文本理解、caption 生成。用于处理半…

Windows 下 Qt 获取系统唯一 ID

前言 随着信息化和智能化的发展,软件产品的分发与使用环境日益多样化,软件盗版、非法复制和未经授权的使用问题愈发突出。为了有效保护软件知识产权,同时确保系统和用户数据的安全,软件开发者需要一种可靠的方法来识别每一台设备的唯一性,从而实现“一机一码”的验证机制…

Devops之Jenkins:Jenkins服务器中的slave节点是什么?我们为什么要使用slave节点?如何添加一个windows slave节点?

Jenkins服务器中的slave节点是什么&#xff1f;Jenkins 的slave节点是一台可以在其上执行作业的计算机。从属作业的文件系统、环境变量、操作系统和内存都基于slave节点。您无需在slave节点上安装 Jenkins&#xff0c;它就可以正常工作。我们为什么要使用slave节点&#xff1f;…

大数据世界的开拓者:深入浅出MapReduce分布式计算经典范式

在我们这个数据爆炸的时代,单台计算机的处理能力早已无法应对PB(Petabyte)乃至EB(Exabyte)级别数据的处理需求。想象一下,要在一台普通的电脑上统计全互联网所有网页中出现频率最高的100个词汇,这可能需要耗费数年时间。于是,我们需要一种方法,能将一个巨大的任务拆解…

神经网络|(十一)概率论基础知识-协方差

【1】引言 前序学习进程中&#xff0c;已经对概率论的基础知识做了学习&#xff0c;比如贝特斯公式、朴素贝叶斯算法拉普拉斯平滑计算条件概率等。 在此基础上&#xff0c;我们又对scikit-learn的使用进行了初步探索。 随着学习的深入&#xff0c;对样本数据的处理越来越重要&…

K8s存储与微服务实战精解

K8s存储这样生成的pod名字不固定&#xff0c;IP不固定此时是访问一个无状态的服务&#xff0c;那没什么影响&#xff0c;访问到访问不到都没啥影响但是如果有一个有状态的服务&#xff0c;他要指定master&#xff0c;那此时的pod做不了负载均衡statefulset控制器无头服务创建一…

深度学习-----《PyTorch深度学习核心应用解析:从环境搭建到模型优化的完整实践指南》

一、深度学习框架对比核心框架对比PyTorch&#xff1a;支持GPU加速&#xff0c;底层基于NumPy&#xff0c;Meta&#xff08;原Facebook&#xff09;开发&#xff0c;生态完善&#xff08;如Llama大模型&#xff09;。TensorFlow&#xff1a;谷歌开发&#xff0c;存在2个不兼容版…

Ubuntu Server 系统安装 Docker

文章目录简介Ubuntu Server 简介VirtualBox 安装 Ubuntu Server 系统安装 DockerDocker 配置重启 Docker验证镜像源把用户加入 docker 组开启 Docker Api卸载 Docker简介 本文详细介绍了在Ubuntu系统上安装和配置Docker的完整流程&#xff0c;包括Docker官方源添加、依赖包安装…

从0到1:用 Qwen3-Coder 和 高德MCP 助力数字文旅建造——国庆山西游

从0到1&#xff1a;用 Qwen3-Coder 和 高德MCP 助力数字文旅建造——国庆山西游 1. 背景 “技术不是替代旅行&#xff0c;而是让旅途更有把握&#xff0c;让每一次选择更符合你的期待。” 随着大模型与地图服务能力的成熟&#xff0c;围绕旅游场景的“智能行程助理”成为低门槛…

RabbitMQ--消费端异常处理与 Spring Retry

1. 消息确认机制&#xff08;ack&#xff09;RabbitMQ 消息投递到消费者后&#xff0c;必须确认&#xff08;ack&#xff09;才能从队列中移除&#xff1a;auto-ack true消息一投递就算消费成功。如果消费者宕机&#xff0c;消息会丢失。一般不用。manual-ack false&#xff…

eniac:世界上第一台通用电子计算机的传奇

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; ✨ 1. eniac概述&#xff1a;计算机时代的黎明 eniac&#xff08;ele…

网络与信息安全有哪些岗位:(6)安全开发工程师

想知道网络与信息安全领域有哪些具体岗位吗&#xff1f; 网络与信息安全有哪些岗位&#xff1a;&#xff08;1&#xff09;网络安全工程师-CSDN博客 网络与信息安全有哪些岗位&#xff1a;&#xff08;2&#xff09;渗透测试工程师_网络安全渗透工程师-CSDN博客 网络与信息安…

C-JSON接口的使用

一、cJSON 核心数据结构cJSON 的所有操作都围绕 cJSON 结构体展开&#xff0c;它代表 JSON 中的一个节点&#xff08;可以是对象、数组、字符串、数字等&#xff09;&#xff1a;typedef struct cJSON {struct cJSON *next, *prev; // 用于链表&#xff08;数组/对象的子节点…

TypeScript 类型系统(二)

本文将简述类型系统中的类型联合&#xff0c;通俗的来说就是将一个变量规定为不是某一个类型&#xff0c;而是某些类型&#xff0c;我们在日常开发中很常见下面会给出例子。值类型在JavaScript中用const声明的变量是不可以再次赋值的&#xff0c;也就是常量。在TypeScript中也可…

无刷电机控制 - STM32F405+CubeMX+HAL库+SimpleFOC08,速度闭环控制(有电流环)

导言 《STM32F405CubeMXHAL库SimpleFOC07&#xff0c;ADC采样相电流&#xff0c;频率20KHz&#xff08;TIM1触发Injected Sampling中断》&#xff0c;有了上一章节的电流采样后&#xff0c;可以完善速度闭环控制了。 有了电流环的速度闭环控制&#xff0c;电机的扭矩会显得大很…

【机械故障】共振峰

机械故障信号分析 提示:学习笔记 1、机械振动名词 2、共振峰 共振峰 机械故障信号分析 1、机械振动名词 [2、共振峰](https://editor.csdn.net/md/?not_checkout=1&activity_id=10937&spm=1057.2600.3001.10415) @[TOC](共振峰) `详细讲解共振峰、共振频率带、共振频…

力扣(用队列实现栈)

解析 LeetCode 225. 用队列实现栈&#xff1a;单队列的巧妙运用 一、题目分析&#xff08;一&#xff09;功能需求 实现 MyStack 类&#xff0c;支持栈的四种操作&#xff1a; push(int x)&#xff1a;将元素压入栈顶。pop()&#xff1a;移除并返回栈顶元素。top()&#xff1a;…

服务器Docker 安装和常用命令总结

Docker 安装和常用命令总结Docker 是一种开源平台&#xff0c;用于自动化应用程序的部署、扩展和管理。通过将应用程序及其依赖打包到一个轻量级、可移植的容器中&#xff0c;Docker 能够在任何地方统一运行&#xff0c;解决了不同环境间的兼容性问题。本篇文章将介绍 Docker 的…

2025年广东省无线电管理普法宣传活动

一、无线电发射设备型号核准相关制度及要求1.型号核准设备类型&#xff1a;一、公众网移动通信设备二、专用通信设备三、无线接入设备四、广播发射设备五、雷达设备六、导航设备七、卫星通信设备(含终端地球站)无线电发射设备八、公众网移动通信模块九、无线接入模块十、其他设…

使用 Whisper 将南蒂罗尔方言语音转录为标准德语文本的研究

使用 Whisper 将南蒂罗尔方言语音转录为标准德语文本的研究 原文:Speech transcription from South Tyrolean Dialect to Standard German with Whisper 本研究展示了首个经过微调的Whisper模型,用于将南蒂罗尔方言语音自动翻译为标准德语文本。为了满足字幕和翻译方面尚未被…