詳解golang的日期與時間型態的變化與使用
在 Golang 中,日期與時間的操作主要是通過內建的 time 套件完成的。time 提供了多種處理日期與時間的方法、型態和功能,非常適合用於時間相關的應用程式開發。
Golang 日期與時間的基本型態
1.
time.Time
time.Time 是 Golang 中的日期與時間的核心型態,用於表示特定的時間點。
它是不可變的(immutable),即一旦創建,值無法被更改。
import (
"fmt"
"time"
)
func main() {
now := time.Now() // 獲取當前時間
fmt.Println("Current Time:", now)
}
2.
time.Duration
time.Duration 表示兩個時間點之間的時間間隔,精確到納秒。
是 int64 的別名,內部表示為納秒數。
import (
"fmt"
"time"
)
func main() {
duration := time.Hour + 30*time.Minute
fmt.Println("Duration:", duration)
}
Golang 日期與時間的格式化與解析
1.
格式化時間:Format 方法
格式化範例:
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("Default Format:", now)
// 自訂格式
fmt.Println("YYYY-MM-DD:", now.Format("2006-01-02"))
fmt.Println("YYYY/MM/DD HH:MM:SS:", now.Format("2006/01/02 15:04:05"))
fmt.Println("DD-MM-YYYY:", now.Format("02-01-2006"))
}
2.
解析時間:Parse 方法
Parse 用於將字串解析為 time.Time 型態。
import (
"fmt"
"time"
)
func main() {
timeStr := "2025-02-06 15:30:00"
layout := "2006-01-02 15:04:05"
parsedTime, err := time.Parse(layout, timeStr)
if err != nil {
fmt.Println("Error parsing time:", err)
} else {
fmt.Println("Parsed Time:", parsedTime)
}
}
常用功能
1.
獲取當前時間:time.Now
now := time.Now()
fmt.Println("Current Time:", now)
2.
計算時間差:Sub
Sub 方法用於計算兩個時間點之間的差距,返回 time.Duration。
import (
"fmt"
"time"
)
func main() {
start := time.Now()
time.Sleep(2 * time.Second) // 模擬延遲
end := time.Now()
duration := end.Sub(start)
fmt.Println("Elapsed Time:", duration)
}
3.
增加/減少時間:Add
可以通過 time.Duration 增加或減少時間。
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// 加一小時
plusOneHour := now.Add(1 * time.Hour)
fmt.Println("One Hour Later:", plusOneHour)
// 減一天
minusOneDay := now.Add(-24 * time.Hour)
fmt.Println("One Day Earlier:", minusOneDay)
}
4.
比較時間:Before、After 和 Equal
import (
"fmt"
"time"
)
func main() {
time1 := time.Date(2025, 2, 6, 10, 0, 0, 0, time.UTC)
time2 := time.Date(2025, 2, 7, 10, 0, 0, 0, time.UTC)
fmt.Println("time1 is before time2:", time1.Before(time2))
fmt.Println("time1 is after time2:", time1.After(time2))
fmt.Println("time1 is equal to time2:", time1.Equal(time2))
}
計時功能
1.
計算執行時間:time.Since
time.Since 是 time.Now().Sub(t) 的快捷方式。
import (
"fmt"
"time"
)
func main() {
start := time.Now()
// 模擬一些工作
time.Sleep(2 * time.Second)
duration := time.Since(start)
fmt.Println("Execution Time:", duration)
}
2.
使用 Ticker 執行定時任務
time.Ticker 可用於週期性執行任務。
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for i := 0; i < 5; i++ {
<-ticker.C
fmt.Println("Tick at", time.Now())
}
}
注意事項
時區處理: 使用 time.LoadLocation 和 In 方法來處理不同的時區。
loc, _ := time.LoadLocation("Asia/Taipei")
now := time.Now().In(loc)
fmt.Println("Time in Taipei:", now)
高精度計時: 如果需要更高的計時精度,可以使用 time.Now().UnixNano() 獲取當前時間的納秒級時間戳。
長時間操作: 當處理超過一天以上的時間間隔時,建議使用 time.Duration,避免精度損失。
留言
張貼留言