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

