Skip to content

time

Package time menyediakan fungsi dan metode terkait waktu dan kalender.

Fungsi time.Now() dapat memperoleh waktu saat ini

go
func Now() Time
go
now := time.Now()
fmt.Println(now)
//2022-11-17 10:00:18.6983438 +0800 CST m=+0.007095001

Tipe data yang dikembalikan adalah struct Time, yang memiliki sangat banyak metode operasi waktu.

go
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 waktu

Unit Waktu

Package time menyimpan konstanta unit waktu dasar

go
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

go
now := time.Now()

Output format 24 jam

go
fmt.Println(now.Format("2006-01-02 15:04:05 Monday Jan"))
//2022-11-17 10:44:48 Thursday Nov

Hanya output tanggal

go
fmt.Println(now.Format("2006-01-02"))
//2022-11-17

Hanya output waktu format 12 jam

go
fmt.Println(now.Format("15:04:05 PM"))
//10:48:47 AM

Parsing Waktu

Biasanya kita memiliki kebutuhan yaitu, mengonversi string waktu sesuai format tertentu menjadi struct waktu di Go, selanjutnya inilah yang akan kita lakukan.

go
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 CST

Timer

Timer adalah penghitung waktu, mengekspos channel ke luar, ketika waktu yang ditentukan tiba, channel akan menerima pesan dan menutup.

go
func NewTimer(d Duration) *Timer

Melalui time.NewTimer() dapat membuat timer baru

sh
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.007908001

Setelah menggunakan timer, harus segera menutupnya.

Ticker

Ticker adalah timer, perbedaannya dengan timer adalah, timer bersifat satu kali, sedangkan Ticker memicu secara berkala.

go
func NewTicker(d Duration) *Ticker

Melalui time.NewTicker() dapat membuat timer baru

go
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.016742001

Sama 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.

go
func Sleep(d Duration)
sh
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.013496401

Program di atas akan memblokir selama dua detik setelah output start, kemudian output end.

Golang by www.golangdev.cn edit