Travailler avec les dates en Go (Golang) : bibliothèques et outils
Le langage Go (Golang) propose une bibliothèque standard puissante time, qui couvre la plupart des tâches liées aux dates et à l'heure. Cependant, pour des opérations complexes, comme l'analyse de formats non standard, le travail avec des dates relatives ou les calculs avec des calendriers professionnels, la communauté a créé plusieurs bibliothèques utiles. Dans cet article, nous examinerons à la fois les capacités intégrées de Go et les meilleurs packages tiers pour travailler avec les dates.
1. Bibliothèque intégrée time
La bibliothèque standard time est la base de toute opération sur les dates en Go. Elle fournit :
- Les types
Time,Duration,Location - Des fonctions pour obtenir l'heure actuelle, créer des dates, analyser et formater
- La prise en charge des fuseaux horaires et des horloges monotones
Obtenir l'heure actuelle
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Heure actuelle :", now) fmt.Println("Année :", now.Year()) fmt.Println("Mois :", now.Month()) fmt.Println("Jour :", now.Day())}Formatage des dates
En Go, un format de référence spécial est utilisé : Mon Jan 2 15:04:05 MST 2006 (1,2,3,4,5,6 — les chiffres dans l'ordre croissant).
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:00ZAnalyse de chaînes
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 UTCGestion des fuseaux horaires
loc, _ := time.LoadLocation("Europe/Moscow")moscowTime := time.Now().In(loc)fmt.Println("Heure de Moscou :", moscowTime.Format("15:04:05"))2. Bibliothèque carbon
Le package github.com/golang-module/carbon est l'équivalent Go de la populaire bibliothèque PHP Carbon. Il fournit une API pratique pour travailler avec les dates, y compris les dates relatives, les formats lisibles par l'homme et les appels chaînés.
Installation
go get github.com/golang-module/carbon/v2Exemples d'utilisation
package main
import ( "fmt" "github.com/golang-module/carbon/v2")
func main() { // Date actuelle now := carbon.Now() fmt.Println(now.ToDateString()) // 2025-03-15
// Dates relatives 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
// Formats lisibles par l'homme fmt.Println(now.DiffForHumans()) // 刚刚 (à l'instant)
// Analyse avec prise en charge de multiples formats t := carbon.Parse("2025-03-15 14:30:00") fmt.Println(t.ToDateTimeString()) // 2025-03-15 14:30:00
// Gestion des fuseaux horaires cst := carbon.Now(carbon.NewYork) fmt.Println(cst.ToDateTimeString()) // heure à New York}3. Bibliothèque now
Le package github.com/jinzhu/now (de l'auteur de GORM) fournit des fonctions pratiques pour obtenir le début et la fin des périodes temporelles.
Installation
go get github.com/jinzhu/nowExemples
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)) Aussi dans la bibliothèque
ORM pour C++ : comparaison et exemples d'utilisation (ODB, SOCI, SQLiteCpp)
Files d'attente de tâches en Go : Aperçu des bibliothèques async, gocelery et machinery
Superstruct TypeScript : guide complet avec exemples
Gin pour Go : guide complet avec exemples
Helmet pour JavaScript (Node.js) : guide complet avec exemples