一文帶你掌握Go語言中的時間處理操作
更新時間:2026年04月09日 09:53:12 作者:王碼碼2035哦
這篇文章主要為大家詳細介紹了Go語言中的時間處理操作的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
1. 時間類型
Go語言的time包提供了時間處理的核心功能。主要類型包括:
time.Time:表示一個具體的時間點time.Duration:表示一段時間間隔time.Location:表示時區(qū)
2. 基本時間操作
2.1 獲取當(dāng)前時間
package main
import (
"fmt"
"time"
)
func main() {
// 獲取當(dāng)前時間
now := time.Now()
fmt.Println("Current time:", now)
// 獲取UTC時間
utc := time.Now().UTC()
fmt.Println("UTC time:", utc)
}
2.2 時間格式化
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// 格式化時間
fmt.Println("RFC3339:", now.Format(time.RFC3339))
fmt.Println("Custom:", now.Format("2006-01-02 15:04:05"))
}
2.3 時間解析
package main
import (
"fmt"
"time"
)
func main() {
// 解析時間字符串
t, err := time.Parse("2006-01-02", "2023-12-25")
if err != nil {
fmt.Println("Error parsing time:", err)
return
}
fmt.Println("Parsed time:", t)
}3. 時間計算
3.1 時間加減
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// 加1小時
oneHourLater := now.Add(time.Hour)
fmt.Println("One hour later:", oneHourLater)
// 減30分鐘
thirtyMinutesAgo := now.Add(-30 * time.Minute)
fmt.Println("Thirty minutes ago:", thirtyMinutesAgo)
}
3.2 時間比較
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
later := now.Add(time.Hour)
// 比較時間
fmt.Println("now before later:", now.Before(later))
fmt.Println("now after later:", now.After(later))
fmt.Println("now equal later:", now.Equal(later))
}
3.3 時間差
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
// 模擬耗時操作
time.Sleep(1 * time.Second)
end := time.Now()
duration := end.Sub(start)
fmt.Println("Duration:", duration)
fmt.Println("Seconds:", duration.Seconds())
}
4. 時區(qū)處理
package main
import (
"fmt"
"time"
)
func main() {
// 獲取本地時區(qū)
loc, err := time.LoadLocation("Local")
if err != nil {
fmt.Println("Error loading location:", err)
return
}
// 獲取特定時區(qū)
nyc, err := time.LoadLocation("America/New_York")
if err != nil {
fmt.Println("Error loading NYC location:", err)
return
}
// 創(chuàng)建帶時區(qū)的時間
t := time.Date(2023, 12, 25, 10, 0, 0, 0, nyc)
fmt.Println("NYC time:", t)
// 轉(zhuǎn)換時區(qū)
localTime := t.In(loc)
fmt.Println("Local time:", localTime)
}
5. 定時器
5.1 一次性定時器
package main
import (
"fmt"
"time"
)
func main() {
// 創(chuàng)建定時器
timer := time.NewTimer(2 * time.Second)
fmt.Println("Waiting for timer...")
<-timer.C
fmt.Println("Timer fired!")
}
5.2 周期性定時器
package main
import (
"fmt"
"time"
)
func main() {
// 創(chuàng)建周期性定時器
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
go func() {
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}()
// 等待一段時間
time.Sleep(5 * time.Second)
fmt.Println("Done")
}
6. 實戰(zhàn)應(yīng)用
6.1 時間戳轉(zhuǎn)換
package main
import (
"fmt"
"time"
)
func main() {
// 時間轉(zhuǎn)時間戳
now := time.Now()
timestamp := now.Unix()
fmt.Println("Timestamp:", timestamp)
// 時間戳轉(zhuǎn)時間
t := time.Unix(timestamp, 0)
fmt.Println("Time from timestamp:", t)
}
6.2 格式化時間輸出
package main
import (
"fmt"
"time"
)
func formatTime(t time.Time) string {
return t.Format("2006-01-02 15:04:05")
}
func main() {
now := time.Now()
fmt.Println("Formatted time:", formatTime(now))
}
6.3 計算時間差
package main
import (
"fmt"
"time"
)
func timeSince(t time.Time) string {
duration := time.Since(t)
switch {
case duration < time.Minute:
return fmt.Sprintf("%d秒前", int(duration.Seconds()))
case duration < time.Hour:
return fmt.Sprintf("%d分鐘前", int(duration.Minutes()))
case duration < 24*time.Hour:
return fmt.Sprintf("%d小時前", int(duration.Hours()))
default:
return fmt.Sprintf("%d天前", int(duration.Hours()/24))
}
}
func main() {
past := time.Now().Add(-2 * time.Hour)
fmt.Println("Time since:", timeSince(past))
}
7. 總結(jié)
- 使用
time.Now()獲取當(dāng)前時間 - 使用
time.Format()格式化時間 - 使用
time.Parse()解析時間字符串 - 使用
Add()和Sub()進行時間計算 - 使用
Before(),After(),Equal()比較時間 - 使用
LoadLocation()處理時區(qū) - 使用
NewTimer()和NewTicker()創(chuàng)建定時器 - 掌握時間戳與時間對象的相互轉(zhuǎn)換
到此這篇關(guān)于一文帶你掌握Go語言中的時間處理操作的文章就介紹到這了,更多相關(guān)Go語言時間處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

