Go 語言標準庫中time模塊詳細功能介紹與示例

以下是 Go 語言 time 模塊的詳細說明及示例,涵蓋時間操作、定時器、時區處理等核心功能:


一、時間基礎操作

1. 獲取時間
// 當前本地時間
now := time.Now()
fmt.Println(now) // 2023-08-04 15:30:45.123456 +0800 CST// 構造指定時間
t := time.Date(2023, 8, 4, 12, 30, 0, 0, time.UTC)
fmt.Println(t) // 2023-08-04 12:30:00 +0000 UTC
2. 時間戳轉換
// 獲取秒級/毫秒級/納秒級時間戳
sec := now.Unix()      // 1691134245
msec := now.UnixMilli()// 1691134245123
nsec := now.UnixNano() // 1691134245123456789// 時間戳轉Time對象
t1 := time.Unix(sec, 0) // 2023-08-04 15:30:45 +0800 CST

二、時間格式化與解析

1. 標準格式化
// 格式化為字符串(固定布局)
fmt.Println(now.Format("2006-01-02 15:04:05")) // 2023-08-04 15:30:45
fmt.Println(now.Format(time.RFC3339))          // 2023-08-04T15:30:45+08:00// 解析時間字符串
t2, _ := time.Parse("2006-01-02", "2023-08-04")
fmt.Println(t2) // 2023-08-04 00:00:00 +0000 UTC
2. 時區處理
// 加載時區
loc, _ := time.LoadLocation("America/New_York")
nyTime := now.In(loc)
fmt.Println(nyTime) // 2023-08-04 03:30:45 -0400 EDT// 創建固定時區
fixedZone := time.FixedZone("CST", 8*3600)
t3 := time.Date(2023, 8, 4, 12, 0, 0, 0, fixedZone)

三、時間運算與比較

1. 時間加減
// 加1小時30分鐘
t4 := now.Add(1*time.Hour + 30*time.Minute)// 計算時間差
duration := t4.Sub(now) // 1h30m0s// 使用時間常量
t5 := now.Add(24 * time.Hour) // 加1天
2. 時間比較
// 判斷時間先后
isAfter := now.After(t3)  // true
isBefore := now.Before(t3) // false// 計算相對時間
time.Since(t3)  // 已過時間
time.Until(t3)  // 剩余時間

四、定時器與周期任務

1. Timer(單次定時)
timer := time.NewTimer(2 * time.Second)
<-timer.C // 阻塞等待2秒
timer.Stop() // 取消未觸發的定時器
2. Ticker(周期觸發)
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()for {select {case <-ticker.C:fmt.Println("每秒觸發")case <-time.After(5 * time.Second):return // 5秒后退出}
}

五、其他實用方法

1. 睡眠控制
time.Sleep(100 * time.Millisecond) // 精確睡眠
2. 時間間隔計算
start := time.Now()
// 執行某些操作...
elapsed := time.Since(start) // 計算耗時
fmt.Printf("耗時: %v\n", elapsed)
3. 時間組成部分提取
year := now.Year()     // 2023
month := now.Month()   // August
day := now.Day()       // 4
hour := now.Hour()     // 15
minute := now.Minute() // 30
4. 時間周期判斷
// 判斷是否為周末
if now.Weekday() == time.Saturday || now.Weekday() == time.Sunday {fmt.Println("周末")
}

六、特殊時間處理

1. 截止時間控制
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()select {
case <-ctx.Done():fmt.Println("操作超時")
}
2. 解析持續時間字符串
duration, _ := time.ParseDuration("1h30m40s")
fmt.Println(duration.Hours()) // 1.511111111111111

七、時間格式布局對照表

布局字符含義示例
2006年(4位)2023
01月(前導零)08
02日(前導零)04
15時(24小時制)15
04分(前導零)05
05秒(前導零)06
.999毫秒(可重復).123
MST時區縮寫CST
-0700時區偏移+0800

八、典型應用場景

1. 接口超時控制
func fetchData() (string, error) {// 模擬網絡請求time.Sleep(2 * time.Second)return "data", nil
}func main() {ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)defer cancel()select {case result := <-asyncFetch(ctx):fmt.Println(result)case <-ctx.Done():fmt.Println("請求超時")}
}
2. 定時批處理
func batchJob() {ticker := time.NewTicker(5 * time.Minute)for range ticker.C {fmt.Println("執行定時任務:", time.Now().Format("15:04:05"))}
}

time 包是 Go 語言時間處理的基石,熟練掌握其 API 可以高效處理各種時間相關需求。建議結合官方文檔 (pkg.go.dev/time) 進行深入理解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74870.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【強化學習】基于深度強化學習的微能源網能量管理與優化策略研究【Python】

目錄 主要內容 程序要點 2.1 微能源網系統組成 2.2 強化學習及Q學習算法 部分代碼 運行結果 下載鏈接 主要內容 該程序借助深度 Q 網絡&#xff08;DQN&#xff09;&#xff0c;學習預測負荷、風 / 光可再生能源功率輸出及分時電價等環境信息&#xff0c;運用…

dom0-kernel: /thermal-zones/soc_max/cooling-maps/map0: could not find phandle 2

問題描述&#xff1a; 由于soc_max下某個節點找不到&#xff0c;到時dom0-kernel后面有很多有關thermal熱管理之類報錯 問題解決及其原因分析&#xff1a; 這是因為在Xen解析相關節點時&#xff0c;soc_max下的某個節點被跳過了&#xff0c;注釋掉相關的cpu節點處理dom0就可以找…

關于計算機視覺中的插值小記

計算機視覺中的插值&#xff08;Interpolation&#xff09;講解 插值&#xff08;Interpolation&#xff09;在計算機視覺中是一項基礎操作&#xff0c;常用于圖像縮放、旋轉、去噪、圖像重建等任務。其核心思想是在已知數據點之間進行推測&#xff0c;估計未知的像素值或特征…

計算機網絡--傳輸層(1)

第五章 傳輸層 一、傳輸層基本功能 進程到進程的邏輯通信 套接字&#xff08;Socket&#xff09;&#xff1a;IP地址:端口號 IP地址&#xff1a;標識主機&#xff08;網絡層功能&#xff09;端口號&#xff1a;16位整數&#xff08;0-65535&#xff09;&#xff0c;標識進程 熟…

指定 Python 3.12.6-slim 作為基礎鏡像

指定 Python 3.12.6-slim 作為基礎鏡像&#xff0c;意思就是&#xff1a; &#x1f449; 用官方的 Python 3.12.6&#xff08;精簡版&#xff09;作為容器的起點&#xff0c;里面已經有 Python 3.12.6 預裝好了&#xff0c;你不用自己裝。 &#x1f539; 為什么用 -slim&…

【藍橋杯】算法筆記1

1.暴力枚舉 給定一個正整數n,請找出所有滿足a + b = n的整數對(a, b),其中a和b都是正整數,且a ≤ b。 輸入格式:一個正整數n (1 ≤ n ≤ 10?) 輸出格式:所有符合條件的(a, b)對,每行一對,按a的升序排列。如果沒有符合條件的對,輸出"No solution"。 問題分…

專注自習室:番茄工作法實踐

專注自習室&#xff1a;番茄工作法實踐 我需要一個任務管理工具&#xff0c;但在網上找了很多都找不到合適的工具。市面上的大多數產品過于強調任務完成性&#xff0c;給我帶來了很強的心理壓力&#xff0c;這種壓力最終反而降低了我的工作效率。于是我決定自己動手&#xff0…

VUE3項目VITE打包優化

VUE3項目VITE打包優化 代碼加密依賴配置效果對比圖 自動導入依賴配置 代碼壓縮依賴配置效果對比圖 圖片壓縮依賴配置效果對比圖 字體壓縮總結與實踐運用效果 代碼加密 依賴 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

文章記單詞 | 第14篇(六級)

一&#xff0c;單詞釋義 affection&#xff1a;n. 喜愛&#xff0c;鐘愛&#xff1b;愛慕之情&#xff1b;感情stream&#xff1a;n. 小河&#xff0c;溪流&#xff1b;一連串&#xff0c;源源不斷&#xff1b;水流&#xff0c;氣流&#xff1b;vi. 流&#xff0c;流動&#x…

歐幾里得距離(Euclidean Distance)公式

歐幾里得距離公式 歐幾里得距離&#xff08;Euclidean Distance&#xff09;是計算兩點之間直線距離的一種方法。它是最常見的距離度量方式之一&#xff0c;廣泛應用于數學、物理、機器學習、計算機視覺等領域。 公式定義 1. 二維空間 在二維平面上&#xff0c;假設有兩個點…

機器學習——LightGBM

LightGBM(light gradient boosting machine&#xff0c;輕量梯度提升機)是對XGBoost進行改進的模型版本&#xff0c;其三者之間的演變關系為&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次對性能進行優化&#xff0c;盡管XGBoost已經很高效了&#xff0c;但是仍然有缺…

內網服務器無法通過公網地址訪問映射到公網的內網服務

內網服務器無法通過公網地址訪問映射到公網的內網服務 問題現象問題原因解決方法總結 前幾天遇到一個網絡問題&#xff0c;在這里做下記錄&#xff0c;希望能幫助到有相同問題的朋友。 問題現象 網絡拓撲如上所示&#xff0c;服務器1和服務器2在同一內網&#xff0c;網段均為1…

python每日十題(13)

一般把計算機完成一條指令所花費的時間稱為一個指令周期。指令周期越短&#xff0c;指令執行就越快。本題答案為D選項。 順序程序具有順序性、封閉性和可再現性的特點&#xff0c;使得程序設計者能夠控制程序執行的過程(包括執行順序、執行時間&#xff09;&#xff0c;對程序執…

Python 裝飾器(Decorators)

什么是裝飾器&#xff1f; 裝飾器&#xff08;Decorator&#xff09;本質上是一個 修改其他函數功能的函數。它的核心思想是&#xff1a;不修改原函數代碼&#xff0c;動態添加新功能。比如&#xff1a; 記錄函數執行時間 檢查用戶權限 緩存計算結果 自動重試失敗操作 理解…

uWebSockets開發入門

一、常用C++ WebSocket開源庫 一些常用的 C++ WebSocket 開源庫,它們支持 WebSocket 協議的實現,適用于客戶端或服務器端開發。 1. Boost.Beast (推薦) 特點:基于 Boost.Asio 的高性能庫,支持 HTTP/WebSocket,屬于 Boost 官方庫的一部分,穩定且跨平臺。 適用場景:需要高…

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺 在于通過分工協作提升整體效率、靈活性和魯棒性。 1. 提升效率與專業性 原理:單一智能體無需處理全流程,通過專業化分工減少冗余計算和決策延遲。 示例: 自動駕駛系統: 感知智能體:專門處理攝像頭、激光雷達等傳…

項目復盤:websocket不受跨域限制的原理

主要還是因為&#xff1a; 1、WebSocket 是獨立于 HTTP 的應用層協議&#xff0c;通過 HTTP 建立連接后&#xff0c;完全脫離 HTTP 語義約束。這意味著 不受 HTTP 同源策略限制 不需要預檢請求 不依賴 CORS 頭機制 2、建立連接時的握手請求仍使用 HTTP 格式&#xff0c;但…

COMPASS:通過殘差強化學習和技能合成實現跨具身移動策略

25年2月來自 Nvidia、UC Berkeley 和 UT Austin 的論文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 隨著機器人越來越多地部署在不同的應用領域&#xff0c;可泛化的跨具身移動策略變得越來越重要。雖然經典的移動棧已被證明在特定…

無人機,雷達定點飛行時,位置發散,位置很飄,原因分析

參考&#xff1a; 無人車傳感器 IMU與GPS數據融合進行定位機制_gps imu 組合定位原始數-CSDN博客 我的無人機使用雷達定位&#xff0c;位置模式很飄 雷達的更新頻率也是10HZ&#xff0c; 而px飛控的頻率是100HZ&#xff0c;沒有對兩者之間的頻率差異做出處理 所以才導致無人…

學習threejs,使用Sprite精靈、SpriteMaterial精靈材質

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??THREE.Sprite1.1.1 ??代碼…