time
Package time menyediakan fungsi dan metode terkait waktu dan kalender.
Fungsi time.Now() dapat memperoleh waktu saat ini
func Now() Timenow := time.Now()
fmt.Println(now)
//2022-11-17 10:00:18.6983438 +0800 CST m=+0.007095001Tipe data yang dikembalikan adalah struct Time, yang memiliki sangat banyak metode operasi waktu.
func (t *Time) nsec() int32 // Nanodetik
func (t *Time) sec() int64 // Detik
func (t *Time) unixSec() // Mengembalikan detik dalam format waktu Unix
func (t *Time) addSec(d int64) // Menambahkan detik
func (t *Time) setLoc(loc *Location) // Mengatur wilayah
func (t *Time) stripMono() // Menghapus pembacaan jam monoton waktu
func (t Time) After(u Time) // Menentukan apakah suatu waktu setelahnya
func (t Time) Before(u Time) bool // Menentukan apakah suatu waktu sebelumnya
func (t Time) Equal(u Time) bool // Menentukan apakah dua waktu mewakili momen yang sama
func (t Time) Sub(u Time) Duration // Menghitung selisih antara dua waktu
func (t Time) Add(d Duration) Time // Menambahkan interval waktuUnit Waktu
Package time menyimpan konstanta unit waktu dasar
const (
minDuration Duration = -1 << 63
maxDuration Duration = 1<<63 - 1
)
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)Tipe mereka adalah time.Duration, unit terkecil adalah nanodetik, yang terbesar adalah jam.
Format
Tipe waktu dapat diformat output, tetapi perlu diperhatikan bahwa template format di Go bukan yyyy-mm-dd yang umum, tetapi berdasarkan waktu kelahiran Go. Waktu kelahiran Go adalah tanggal 2 Januari 2006 pukul 15:04 sore.
Contoh
now := time.Now()Output format 24 jam
fmt.Println(now.Format("2006-01-02 15:04:05 Monday Jan"))
//2022-11-17 10:44:48 Thursday NovHanya output tanggal
fmt.Println(now.Format("2006-01-02"))
//2022-11-17Hanya output waktu format 12 jam
fmt.Println(now.Format("15:04:05 PM"))
//10:48:47 AMParsing Waktu
Biasanya kita memiliki kebutuhan yaitu, mengonversi string waktu sesuai format tertentu menjadi struct waktu di Go, selanjutnya inilah yang akan kita lakukan.
func main() {
location, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println(err)
return
}
inLocation, err := time.ParseInLocation("2006/01/02", "2012/10/12", location)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(inLocation.String())
}Output akhir
2012-10-12 00:00:00 +0800 CSTTimer
Timer adalah penghitung waktu, mengekspos channel ke luar, ketika waktu yang ditentukan tiba, channel akan menerima pesan dan menutup.
func NewTimer(d Duration) *TimerMelalui time.NewTimer() dapat membuat timer baru
func main() {
timer := time.NewTimer(time.Second)
defer timer.Stop()
select {
case t := <-timer.C:
fmt.Println(t)
}
}2023-09-25 21:25:03.5696803 +0800 CST m=+1.007908001Setelah menggunakan timer, harus segera menutupnya.
Ticker
Ticker adalah timer, perbedaannya dengan timer adalah, timer bersifat satu kali, sedangkan Ticker memicu secara berkala.
func NewTicker(d Duration) *TickerMelalui time.NewTicker() dapat membuat timer baru
func main() {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for i := 0; i < 3; i++ {
select {
case t := <-ticker.C:
fmt.Println(t)
}
}
}2023-09-25 21:29:20.4429256 +0800 CST m=+1.009508401
2023-09-25 21:29:21.4512075 +0800 CST m=+2.017790301
2023-09-25 21:29:22.4501592 +0800 CST m=+3.016742001Sama halnya, setelah menggunakan ticker, juga harus segera menutupnya.
Sleep
time.Sleep() dapat membuat goroutine saat ini dalam keadaan tertunda selama waktu tertentu, selama periode ini goroutine akan diblokir, sampai status berjalan dipulihkan.
func Sleep(d Duration)func main() {
start := time.Now()
fmt.Println(start)
time.Sleep(time.Second * 2)
end := time.Now()
fmt.Println(end)
}2023-09-25 21:36:35.7229057 +0800 CST m=+0.001627901
2023-09-25 21:36:37.7347742 +0800 CST m=+2.013496401Program di atas akan memblokir selama dua detik setelah output start, kemudian output end.
