Arbeiten mit Daten in Go (Golang): Überblick über Bibliotheken
Die Arbeit mit Datum und Zeit ist eine der Kernaufgaben in jeder Programmiersprache. In Go (Golang) bietet die Standardbibliothek das leistungsstarke Paket time, aber manchmal greifen Entwickler aus Bequemlichkeit auf Drittanbieter-Bibliotheken zurück. In diesem Artikel werden wir die wichtigsten Funktionen des Standardpakets durchgehen und zwei beliebte Bibliotheken betrachten: carbon und now.
1. Das Standardpaket time
Das Paket time ist die Grundlage für die Arbeit mit Daten in Go. Es enthält die Typen Time, Duration, Funktionen zum Parsen, Formatieren sowie für die Arbeit mit Timern und Zeitzonen.
Erstellen und Formatieren eines Datums
package main
import ( "fmt" "time")
func main() { // Aktuelle Zeit now := time.Now() fmt.Println("Jetzt:", now)
// Erstellen eines bestimmten Datums date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Bestimmtes Datum:", date)
// Formatierung (zwingend "2006-01-02 15:04:05" als Referenz) fmt.Println("Format:", date.Format("02.01.2006 15:04:05"))}Parsen eines Strings in ein Datum
func main() { // Parsen mit Angabe des Formats str := "2025-03-15 14:30:00" parsed, err := time.Parse("2006-01-02 15:04:05", str) if err != nil { panic(err) } fmt.Println("Geparst:", parsed)}Arbeiten mit Zeitzonen
func main() { loc, _ := time.LoadLocation("Europe/Moscow") moscowTime := time.Now().In(loc) fmt.Println("Moskauer Zeit:", moscowTime)}Differenz zwischen Daten
func main() { start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC) end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC) duration := end.Sub(start) fmt.Printf("Differenz: %v (Stunden: %v)", duration, duration.Hours())}2. Die Bibliothek carbon
Die Bibliothek carbon (github.com/golang-module/carbon) ist ein Port der beliebten PHP-Bibliothek Carbon für Go. Sie bietet eine praktische Fluent-Schnittstelle für die Arbeit mit Daten.
Installation
go get github.com/golang-module/carbon/v2Anwendungsbeispiele
package main
import ( "fmt" "github.com/golang-module/carbon/v2")
func main() { // Aktuelles Datum now := carbon.Now() fmt.Println("Jetzt:", now.ToString())
// Datum erstellen date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("Geparst:", date.ToDateString())
// Tage hinzufügen future := carbon.Now().AddDays(10) fmt.Println("In 10 Tagen:", future.ToDateString())
// Differenz in Tagen diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("Bis Neujahr: %d Tage", diff)
// Formatierung fmt.Println("Benutzerdefiniertes Format:", carbon.Now().Format("d/m/Y H:i:s"))}Praktische Methoden
StartOfDay()/EndOfDay()— Beginn/Ende des TagesIsWeekend()/IsWeekday()— Prüfung des WochentagsAge()— Alter ab GeburtsdatumDiffForHumans()— menschenlesbare Differenz (z.B. "vor 3 Tagen")
3. Die Bibliothek now
Die Bibliothek now (github.com/jinzhu/now) vom Ersteller von GORM ist ein leichtes Dienstprogramm zum Ermitteln von Beginn und Ende von Zeiträumen.
Installation
go get github.com/jinzhu/nowAnwendungsbeispiele
package main
import ( "fmt" "time" "github.com/jinzhu/now")
func main() { // Beginn des Tages beginningOfDay := now.BeginningOfDay() fmt.Println("