time
Das time Paket bietet Funktionen und Methoden für Zeit und Kalender.
Die Funktion time.Now() gibt die aktuelle Zeit zurück:
func Now() Timenow := time.Now()
fmt.Println(now)
//2022-11-17 10:00:18.6983438 +0800 CST m=+0.007095001Der zurückgegebene Datentyp ist die Time-Struktur, die sehr viele Methoden für Zeitoperationen enthält.
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 hinzuZeiteinheiten
Das time Paket enthält grundlegende Konstanten für Zeiteinheiten:
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:
now := time.Now()Formatierte Ausgabe im 24-Stunden-Format:
fmt.Println(now.Format("2006-01-02 15:04:05 Monday Jan"))
//2022-11-17 10:44:48 Thursday NovNur Datum ausgeben:
fmt.Println(now.Format("2006-01-02"))
//2022-11-17Nur Zeit im 12-Stunden-Format ausgeben:
fmt.Println(now.Format("15:04:05 PM"))
//10:48:47 AMZeit 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.
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 CSTTimer
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.
func NewTimer(d Duration) *TimerMit time.NewTimer() kann ein neuer Timer erstellt werden:
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.007908001Nach 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.
func NewTicker(d Duration) *TickerMit time.NewTicker() kann ein neuer Ticker erstellt werden:
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.016742001Auch 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.
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.013496401Das obige Programm wird nach der Ausgabe von start für zwei Sekunden blockieren und dann end ausgeben.
