Golang time包中的函數(shù)用法詳解
func Now() Time
返回當前的系統(tǒng)時間。
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Unix()) }
func Parse(layout, value string) (Time, error)
將字符串解析為時間類型,并返回對應的 Time 對象。layout 參數(shù)是表示時間的格式,例如"2006-01-02 15:04:05"表示年、月、日、時、分、秒的格式。
package main import ( "fmt" "time" ) func main() { layout := "2006-01-02 15:04:05" str := "2023-07-19 12:34:56" t, _ := time.Parse(layout, str) fmt.Println(t) }
func ParseDuration(s string) (Duration, error)
用于將字符串解析為 Duration 類型。
package main import ( "fmt" "time" ) func main() { durationStr := "2h45m" duration, err := time.ParseDuration(durationStr) if err != nil { fmt.Println("解析持續(xù)時間錯誤:", err) return } fmt.Printf("解析后的持續(xù)時間為:%v\n", duration) }
func ParseInLocation(layout, value string, loc *Location) (Time, error)
用于將字符串解析為 Time 類型,并在指定的時區(qū)中解析時間。
package main import ( "fmt" "time" ) func main() { location := time.FixedZone("CustomZone", 2*60*60) // 創(chuàng)建一個偏移量為2小時的固定時區(qū) timeString := "2023-07-18 14:30:00" // 要解析的字符串 t, err := time.ParseInLocation("2006-01-02 15:04:05", timeString, location) if err != nil { fmt.Println("解析時間錯誤:", err) return } fmt.Printf("解析后的時間為:%v\n", t) }
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
根據(jù)給定的年、月、日、時、分、秒和納秒創(chuàng)建一個 Time 對象,loc 參數(shù)表示時區(qū)。
package main import ( "fmt" "time" ) func main() { t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) fmt.Println(t) }
func Since(t Time) Duration
返回從當前時間到 t 之間的時間差,以納秒為單位。
package main import ( "fmt" "time" ) func main() { t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) duration := time.Since(t) fmt.Println(duration) }
func Until(t Time) Duration
返回從 t 到當前時間之間的時間差,以納秒為單位。
package main import ( "fmt" "time" ) func main() { t := time.Date(2023, 7, 19, 12, 34, 56, 0, time.UTC) duration := time.Until(t) fmt.Println(duration) }
func After(d Duration) <-chan Time
用于創(chuàng)建一個通道,將在指定的時間間隔后向通道發(fā)送一個 time.Time 類型的值。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個將在5秒后發(fā)送值的通道 timer := time.After(5 * time.Second) // 等待通道發(fā)送值 fmt.Println(<-timer) }
func AfterFunc(d Duration, f func()) *Timer
用于創(chuàng)建一個定時器,并在指定的時間間隔后執(zhí)行一個函數(shù)。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個將在5秒后觸發(fā)的定時器 timer := time.AfterFunc(5*time.Second, func() { fmt.Println("路多辛的博客!") }) // 停止定時器 time.Sleep(10 * time.Second) timer.Stop() // 輸出:路多辛的博客! fmt.Println("Program ended") }
func Unix(sec int64, nsec int64) Time
用于將 Unix 時間戳轉(zhuǎn)換為時間類型。
package main import ( "fmt" "time" ) func main() { // 定義一個Unix時間戳 unixTime := int64(1691587957) // 使用time.Unix函數(shù)將Unix時間戳轉(zhuǎn)換為時間類型 t := time.Unix(unixTime, 0) // 打印結果 fmt.Println(t) }
func UnixMilli(msec int64) Time
用于將毫秒時間戳轉(zhuǎn)換為時間類型。
package main import ( "fmt" "time" ) func main() { t := time.UnixMilli(1691587957000) // 打印結果 fmt.Println(t) }
func UnixMicro(usec int64) Time
用于將微秒時間戳轉(zhuǎn)換為時間類型。
package main import ( "fmt" "time" ) func main() { t := time.UnixMilli(1691587957000000) // 打印結果 fmt.Println(t) }
func Tick(d Duration) <-chan Time
用于創(chuàng)建一個定時器,該定時器每隔一定的時間間隔就會向通道發(fā)送當前的時間。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個每隔1秒進行一次打印的定時器 ticker := time.Tick(1 * time.Second) for { <-ticker // 等待定時器的發(fā)送 fmt.Println("這是ticker的打印") } }
func LoadLocation(name string) (*Location, error)
用于加載并返回一個特定的時區(qū)。
package main import ( "fmt" "time" ) func main() { // 加載"Asia/Shanghai"時區(qū) location, err := time.LoadLocation("Asia/Shanghai") if err != nil { fmt.Println("無法加載時區(qū):", err) return } // 使用該時區(qū)創(chuàng)建一個時間對象 t := time.Now().In(location) fmt.Println("當前時間:", t) }
func LoadLocationFromTZData(name string, data []byte) (*Location, error)
用于從 TZ 數(shù)據(jù)中加載并返回一個時區(qū)。
package main import ( "fmt" "time" ) func main() { // 加載"Asia/Shanghai"時區(qū) location, err := time.LoadLocationFromTZData("Asia/Shanghai") if err != nil { fmt.Println("無法加載時區(qū):", err) return } // 使用該時區(qū)創(chuàng)建一個時間對象 t := time.Now().In(location) fmt.Println("當前時間:", t) }
func FixedZone(name string, offset int) *Location
用于創(chuàng)建一個具有固定偏移量的時區(qū)。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個偏移量為2小時的固定時區(qū) location := time.FixedZone("CustomZone", 2*60*60) // 使用該時區(qū)創(chuàng)建一個時間對象 t := time.Now().In(location) fmt.Println("當前時間:", t) }
func NewTicker(d Duration) *Ticker
用于創(chuàng)建一個新的 Ticker 對象,該對象可以在指定的時間間隔重復發(fā)送 Time 值。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個每秒發(fā)送一次的 Ticker 對象 ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Println("打印一次路多辛的博客") } } }
func NewTimer(d Duration) *Timer
用于創(chuàng)建一個新的 Timer 對象,該對象可以在指定的時間間隔后發(fā)送一個 Time 類型的值。
package main import ( "fmt" "time" ) func main() { // 創(chuàng)建一個定時器,在2秒后發(fā)送一個時間值 timer := time.NewTimer(2 * time.Second) defer timer.Stop() // 使用定時器發(fā)送的時間值處理函數(shù) timerHandler := func() { fmt.Println("收到時間值") } // 在定時器發(fā)送時間值之前執(zhí)行處理函數(shù) go timerHandler() // 等待定時器發(fā)送時間值 select { case <-timer.C: fmt.Println("定時器已發(fā)送時間值") } }
func Sleep(d Duration)
讓當前的 goroutine 休眠指定的時間。
package main import ( "fmt" "time" ) func main() { fmt.Println("開始休眠") time.Sleep(2 * time.Second) fmt.Println("休眠結束") }
以上就是Golang time包中的函數(shù)詳解的詳細內(nèi)容,更多關于Golang time包函數(shù)的資料請關注腳本之家其它相關文章!
相關文章
解決golang時間字符串轉(zhuǎn)time.Time的坑
這篇文章主要介紹了解決golang時間字符串轉(zhuǎn)time.Time的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04goland遠程調(diào)試k8s上容器的實現(xiàn)
本文主要介紹了goland遠程調(diào)試k8s上容器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02Golang?IOT中的數(shù)據(jù)序列化與解析過程
這篇文章主要介紹了Golang?IOT中的數(shù)據(jù)序列化與解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Go使用TimerController解決timer過多的問題
多路復用,實際上Go底層也是一種多路復用的思想去實現(xiàn)的timer,但是它是底層的timer,我們需要解決的問題就過多的timer問題!本文給大家介紹了Go使用TimerController解決timer過多的問題,需要的朋友可以參考下2024-12-12