Einführung in die Arbeit mit Datum und Uhrzeit in Go
Die Arbeit mit Datum und Uhrzeit ist eine der Kernaufgaben in jeder Programmiersprache. Die Sprache Go (Golang) bietet ein leistungsstarkes und intuitives Paket time, das alle grundlegenden Operationen ermöglicht: Abrufen der aktuellen Zeit, Parsen von Zeichenketten, Formatieren, Berechnen von Differenzen, Erstellen von Timern und vieles mehr. Im Gegensatz zu einigen anderen Sprachen verwendet Go ein einzigartiges Referenzzeitformat, das den Code lesbarer und vorhersagbarer macht. In diesem Artikel werden wir die wichtigsten Funktionen des Pakets time anhand praktischer Beispiele im Detail besprechen.
Grundlegende Typen und Abrufen der aktuellen Zeit
Der Typ time.Time
Der zentrale Typ im Paket time ist die Struktur time.Time. Sie speichert Informationen über Sekunden, Nanosekunden, Zeitzone und einen monotonen Zähler (für präzise Messungen).
Abrufen des aktuellen Zeitpunkts
Um die aktuelle Zeit zu erhalten, wird die Funktion time.Now() verwendet. Sie gibt die lokale Zeit basierend auf den Systemeinstellungen zurück.
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Aktuelle Zeit:", now) fmt.Println("Jahr:", now.Year()) fmt.Println("Monat:", now.Month()) fmt.Println("Tag:", now.Day()) fmt.Println("Stunden:", now.Hour()) fmt.Println("Minuten:", now.Minute()) fmt.Println("Sekunden:", now.Second()) fmt.Println("Nanosekunden:", now.Nanosecond()) fmt.Println("Wochentag:", now.Weekday())}Manuelles Erstellen einer Zeit
Sie können einen bestimmten Zeitpunkt mit der Funktion time.Date() erstellen. Sie akzeptiert Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde und Zeitzone.
package main
import ( "fmt" "time")
func main() { // 15. März 2025, 14:30:00, UTC specificDate := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Erstelltes Datum:", specificDate)}Parsen und Formatieren von Datumsangaben
Das Referenzformat von Go
Go verwendet einen einzigartigen Ansatz zur Formatierung: Anstelle von Codes wie YYYY-MM-DD wird das Referenzdatum Mon Jan 2 15:04:05 MST 2006 (oder kurz 2006-01-02T15:04:05Z07:00) verwendet. Das bedeutet, dass Sie für das Jahr 2006, für den Monat 01, für den Tag 02, für die Stunde 15 (oder 03 für das 12-Stunden-Format), für die Minute 04 und für die Sekunde 05 schreiben.
Formatieren einer Zeit in eine Zeichenkette
Die Methode Format() wandelt time.Time gemäß einer gegebenen Vorlage in eine Zeichenkette um.
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Standardformat:", now.Format("2006-01-02 15:04:05")) fmt.Println("Deutsches Format:", now.Format("02.01.2006 15:04")) fmt.Println("Nur Datum:", now.Format("02 Jan 2006")) fmt.Println("12-Stunden-Format:", now.Format("03:04:05 PM"))}Parsen einer Zeichenkette in ein Datum
Die Funktion time.Parse() wandelt eine Zeichenkette in time.Time um. Wichtig ist, dass die Zeichenkette der Vorlage entspricht.
package main
import ( "fmt" "time")
func main() { dateStr := "2025-03-15 14:30:00" layout := "2006-01-02 15:04:05" parsedTime, err := time.Parse(layout, dateStr) if err != nil { fmt.Println("Fehler beim Parsen:", err) return } fmt.Println("Geparste Zeit:", parsedTime) fmt.Println("Wochentag:", parsedTime.Weekday())}Parsen mit Zeitzone
Für Zeichenketten mit Zeitzone verwenden Sie time.ParseInLocation() oder geben Sie den Offset in der Vorlage an (Z07:00).
package main
import ( "fmt" "tim