C#自定義工具類-時間日期工具類

目錄

時間日期工具類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模型,用于將南蒂羅爾方言語音自動翻譯為標準德語文本。為了滿足字幕和翻譯方面尚未被…