Skip to content

time

Das time Paket bietet Funktionen und Methoden für Zeit und Kalender.

Die Funktion time.Now() gibt die aktuelle Zeit zurück:

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

Der zurückgegebene Datentyp ist die Time-Struktur, die sehr viele Methoden für Zeitoperationen enthält.

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

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

func (t *Time) unixSec() // Gibt Sekunden im Unix-Zeitformat zurück

func (t *Time) addSec(d int64) // Sekunden hinzufügen

func (t *Time) setLoc(loc *Location) // Region einstellen

func (t *Time) stripMono() // Entfernt die monotone Uhrzeit

func (t Time) After(u Time) // Prüft, ob eine Zeit nach dieser liegt

func (t Time) Before(u Time) bool // Prüft, ob eine Zeit vor dieser liegt

func (t Time) Equal(u Time) bool // Prüft, ob zwei Zeiten denselben Zeitpunkt darstellen

func (t Time) Sub(u Time) Duration // Berechnet die Differenz zwischen zwei Zeiten

func (t Time) Add(d Duration) Time // Fügt ein Zeitintervall hinzu

Zeiteinheiten

Das time Paket enthält grundlegende Konstanten für Zeiteinheiten:

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
)

Ihr Typ ist time.Duration. Die kleinste Einheit ist die Nanosekunde, die größte ist die Stunde.

Formatierung

Zeittypen können formatiert ausgegeben werden. Zu beachten ist, dass in Go das Formatierungs-Template nicht das übliche yyyy-mm-dd ist, sondern die Geburtszeit von Go als Template verwendet. Die Geburtszeit von Go ist der 2. Januar 2006 um 15:04 Uhr.

Beispiel:

go
now := time.Now()

Formatierte Ausgabe im 24-Stunden-Format:

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

Nur Datum ausgeben:

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

Nur Zeit im 12-Stunden-Format ausgeben:

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

Zeit parsen

Oft haben wir die Anforderung, einen String mit Zeitangabe in ein bestimmtes Format in die Go-Zeitstruktur zu konvertieren. Das ist, was wir als Nächstes tun werden.

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

Die endgültige Ausgabe:

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

Timer

Timer ist ein Zeitgeber, der nach außen einen Channel bereitstellt. Wenn die angegebene Zeit abgelaufen ist, empfängt der Channel eine Nachricht und schließt sich.

go
func NewTimer(d Duration) *Timer

Mit time.NewTimer() kann ein neuer Timer erstellt werden:

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

Nach der Verwendung des Timers sollte dieser rechtzeitig geschlossen werden.

Ticker

Ticker ist ein Timer. Der Unterschied zum Timer ist, dass der Timer einmalig ist, während der Ticker regelmäßig auslöst.

go
func NewTicker(d Duration) *Ticker

Mit time.NewTicker() kann ein neuer Ticker erstellt werden:

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

Auch hier gilt: Nach der Verwendung des Tickers sollte dieser rechtzeitig geschlossen werden.

sleep

time.Sleep() kann die aktuelle Goroutine für eine bestimmte Zeit in den Ruhezustand versetzen. Während dieser Zeit wird die Goroutine blockiert, bis sie wieder in den aktiven Zustand zurückkehrt.

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

Das obige Programm wird nach der Ausgabe von start für zwei Sekunden blockieren und dann end ausgeben.

Golang by www.golangdev.cn edit