Skip to content

time

time paketi zaman ve takvim ile ilgili fonksiyonlar ve metodlar sağlar.

time.Now() fonksiyonu ile mevcut zamanı alabilirsiniz

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

Dönüş veri tipi Time struct'ıdır, oldukça fazla zaman işlem metodu içerir.

go
func (t *Time) nsec() int32 //Nanosaniye

func (t *Time) sec() int64 //Saniye

func (t *Time) unixSec() //Unix zaman formatında saniyeyi döndürür

func (t *Time) addSec(d int64) //Saniye ekle

func (t *Time) setLoc(loc *Location) //Bölge ayarla

func (t *Time) stripMono() //Zamanın monoton saat okumasını kaldır

func (t Time) After(u Time) //Bir zamanın ondan sonra olup olmadığını kontrol et

func (t Time) Before(u Time) bool //Bir zamanın ondan önce olup olmadığını kontrol et

func (t Time) Equal(u Time) bool //İki zamanın aynı anı temsil edip etmediğini kontrol et

func (t Time) Sub(u Time) Duration //İki zaman arasındaki farkı hesapla

func (t Time) Add(d Duration) Time //Bir zaman aralığı ekle

Zaman Birimleri

time paketi temel zaman birimi sabitlerini içerir

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
)

Tipleri time.Duration'dır, en küçük birim nanosaniye, en büyük birim saattir.

Biçimlendirme

Zaman tipi biçimlendirilmiş olarak çıktı verilebilir, ancak Go'da biçimlendirme şablonunun yaygın yyyy-mm-dd gibi olmadığını unutmayın, Go'nun oluşum zamanı şablon olarak kullanılır. Go'nun oluşum zamanı 2006 yılı Ocak ayı 2. günü öğleden sonra 15:04'tür.

Örnek

go
now := time.Now()

24 saat formatında çıktı

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

Sadece tarih çıktısı

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

Sadece 12 saat formatında zaman çıktısı

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

Zaman Ayrıştırma

Genellikle bir string zamanı belirli bir formatta Go'nun zaman struct'ına dönüştürme ihtiyacımız olur, şimdi yapacağımız şey bu.

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())
}

Son çıktı

2012-10-12 00:00:00 +0800 CST

Timer

Timer bir zamanlayıcıdır, bir channel'ı dışa açar, belirtilen zaman geldiğinde channel mesaj alır ve kapanır.

go
func NewTimer(d Duration) *Timer

time.NewTimer() ile yeni bir zamanlayıcı oluşturabilirsiniz

go
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

Timer'ı kullandıktan sonra zamanında kapatılmalıdır.

Ticker

Ticker bir periyodik zamanlayıcıdır, timer'dan farkı timer'ın bir kerelik olması, Ticker'ın ise periyodik olarak tetiklenmesidir.

go
func NewTicker(d Duration) *Ticker

time.NewTicker() ile yeni bir zamanlayıcı oluşturabilirsiniz

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

Aynı şekilde, ticker'ı kullandıktan sonra zamanında kapatılmalıdır.

sleep

time.Sleep() mevcut goroutine'in belirli bir süre için askıya alınmasını sağlar, bu süre zarfında goroutine engellenecektir, çalıştırma durumuna dönene kadar.

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

Yukarıdaki program start çıktı verdikten sonra iki saniye engellenecek, ardından end çıktı verecektir.

Golang by www.golangdev.cn edit