Time:Go語言的時間處理利器
go time
👨💻簡介
要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的time
Package。
今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。
主要功能
time
Package的主要功能是處理時間和日期的操作,包括時間的表示、創建、格式化和計算。在Go中,時間通常以time.Time
type表示,這個type包含了日期和時間的資訊。
導入Package
import "time"
創建時間
使用time.Now()
函數來獲取當前的時間。
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
fmt.Println("Current Time:", currentTime)
}
你還可以使用time.Date()
函數來創建一個特定日期和時間的time.Time
物件。
package main
import (
"fmt"
"time"
)
func main() {
specificTime := time.Date(2023, time.September, 15, 12, 0, 0, 0, time.UTC)
fmt.Println("Specific Time:", specificTime)
}
時間格式化
time
Package有提供許多方法來格式化時間為字串。可以使用Format
方法和指定的時間格式來實現。
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
fmt.Println("Default Format:", currentTime)
fmt.Println("Custom Format:", currentTime.Format("2006-01-02 15:04:05"))
}
時間操作
對時間進行增減,如計算兩個時間的差距、增加時間、減少時間等。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
oneHourLater := now.Add(time.Hour)
fmt.Println("One Hour Later:", oneHourLater)
tenMinutesAgo := now.Add(-10 * time.Minute)
fmt.Println("Ten Minutes Ago:", tenMinutesAgo)
duration := oneHourLater.Sub(now)
fmt.Println("Time Difference:", duration)
}
定時器
time
Package還提供了定時器的功能,可以用來執行定時任務。
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
fmt.Println("Tick at", time.Now())
}
}
}
Sleep
要讓程式暫停執行一段時間,可以使用time.Sleep
函數。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Start")
time.Sleep(3 * time.Second)
fmt.Println("End after 3 seconds")
}
常見用法
時間比較
使用Before
、After
和Equal
方法來比較兩個時間差。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
future := now.Add(time.Hour)
if future.After(now) {
fmt.Println("Future time is after current time")
}
past := now.Add(-time.Hour)
if past.Before(now) {
fmt.Println("Past time is before current time")
}
sameTime := now
if sameTime.Equal(now) {
fmt.Println("Same time as current time")
}
}
計算時間間隔
使用Sub
方法計算兩個時間之間的時間間隔。
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
time.Sleep(2 * time.Second)
end := time.Now()
duration := end.Sub(start)
fmt.Println("Time elapsed:", duration)
}
時間格式化與解析
將時間格式化為字串,也可以從字串解析出時間。
package main
import (
"fmt"
"time"
)
func main() {
// 格式化時間為字串
currentTime := time.Now()
fmt.Println("Default Format:", currentTime)
fmt.Println("Custom Format:", currentTime.Format("2006-01-02 15:04:05"))
// 從字串解析時間
timeStr := "2023-09-15 14:30:00"
parsedTime, _ := time.Parse("2006-01-02 15:04:05", timeStr)
fmt.Println("Parsed Time:", parsedTime)
}
定義自定義時區
使用time.LoadLocation
來定義自定義的時區。
package main
import (
"fmt"
"time"
)
func main() {
// 定義自定義時區
taipei, _ := time.LoadLocation("Asia/Taipei")
// 在指定時區下獲取時間
twTime := time.Now().In(taipei)
fmt.Println("Taiwai Time:", twTime)
}
定時任務
使用time.Timer
來執行定時任務,通常用來定時執行程式中的某些操作。
package main
import (
"fmt"
"time"
)
func main() {
timer1 := time.NewTimer(2 * time.Second)
<-timer1.C
fmt.Println("Timer 1 fired")
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 fired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}