Arbeiten mit Daten in Go (Golang): Bibliotheken und Werkzeuge
Die Sprache Go (Golang) bietet eine leistungsstarke Standardbibliothek time, die die meisten Aufgaben im Umgang mit Datum und Uhrzeit abdeckt. Für komplexe Operationen wie das Parsen nicht standardisierter Formate, die Arbeit mit relativen Daten oder Berechnungen mit Geschäftskalendern hat die Community jedoch eine Reihe nützlicher Bibliotheken entwickelt. In diesem Artikel betrachten wir sowohl die integrierten Möglichkeiten von Go als auch die besten Drittanbieter-Pakete für die Arbeit mit Daten.
1. Die integrierte Bibliothek time
Die Standardbibliothek time ist die Grundlage für alle Datumsoperationen in Go. Sie bietet:
- Die Typen
Time,Duration,Location - Funktionen zum Abrufen der aktuellen Zeit, Erstellen von Daten, Parsen und Formatieren
- Unterstützung für Zeitzonen und monotone Uhren
Aktuelle Zeit abrufen
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())}Datumsformatierung
In Go wird ein spezielles Referenzformat verwendet: Mon Jan 2 15:04:05 MST 2006 (1,2,3,4,5,6 – Ziffern in aufsteigender Reihenfolge).
now := time.Now()fmt.Println(now.Format("2006-01-02 15:04:05")) // 2025-03-15 14:30:00fmt.Println(now.Format("02 Jan 2006")) // 15 Mar 2025fmt.Println(now.Format(time.RFC3339)) // 2025-03-15T14:30:00ZParsen von Zeichenketten
dateStr := "2025-03-15 14:30:00"t, err := time.Parse("2006-01-02 15:04:05", dateStr)if err != nil { panic(err)}fmt.Println(t) // 2025-03-15 14:30:00 +0000 UTCArbeiten mit Zeitzonen
loc, _ := time.LoadLocation("Europe/Moscow")moscowTime := time.Now().In(loc)fmt.Println("Moskauer Zeit:", moscowTime.Format("15:04:05"))2. Die Bibliothek carbon
Das Paket github.com/golang-module/carbon ist das Go-Äquivalent zur beliebten PHP-Bibliothek Carbon. Es bietet eine praktische API für die Arbeit mit Daten, einschließlich relativer Daten, menschenlesbarer Formate und Methodenverkettung.
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(now.ToDateString()) // 2025-03-15
// Relative Daten fmt.Println(now.AddDays(7).ToDateString()) // 2025-03-22 fmt.Println(now.SubMonths(1).ToDateString()) // 2025-02-15 fmt.Println(now.StartOfMonth().ToDateString()) // 2025-03-01 fmt.Println(now.EndOfMonth().ToDateString()) // 2025-03-31
// Menschenlesbare Formate fmt.Println(now.DiffForHumans()) // 刚刚 (gerade eben)
// Parsen mit Unterstützung vieler Formate t := carbon.Parse("2025-03-15 14:30:00") fmt.Println(t.ToDateTimeString()) // 2025-03-15 14:30:00
// Arbeiten mit Zeitzonen cst := carbon.Now(carbon.NewYork) fmt.Println(cst.ToDateTimeString()) // Zeit in New York}3. Die Bibliothek now
Das Paket github.com/jinzhu/now (vom Autor von GORM) bietet praktische Funktionen zum Abrufen von Beginn und Ende von Zeiträumen.
Installation
go get github.com/jinzhu/nowBeispiele
package main
import ( "fmt" "github.com/jinzhu/now" "time")
func main() { t := time.Now() fmt.Println(now.BeginningOfMonth(t)) // 2025-03-01 00:00:00 fmt.Println(now.EndOfMonth(t)) // 2025-03-31 23:59:59 fmt.Println(now.BeginningOfYear(t))