Introduction au travail avec les dates et l'heure en Go
Le travail avec les dates et l'heure est l'une des tâches clés dans tout langage de programmation. Le langage Go (Golang) fournit un package time puissant et intuitif, qui permet d'effectuer toutes les opérations de base : obtenir l'heure actuelle, analyser des chaînes, formater, calculer des différences, créer des minuteries et bien plus encore. Contrairement à certains autres langages, Go utilise un format de référence temporelle unique, ce qui rend le code plus lisible et prévisible. Dans cet article, nous allons détailler les principales fonctionnalités du package time à l'aide d'exemples pratiques.
Types principaux et obtention de l'heure actuelle
Le type time.Time
Le type central du package time est la structure time.Time. Elle stocke les informations sur les secondes, les nanosecondes, le fuseau horaire et un compteur monotone (pour des mesures précises).
Obtention de l'instant présent
Pour obtenir l'heure actuelle, on utilise la fonction time.Now(). Elle renvoie l'heure locale basée sur les paramètres système.
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()) fmt.Println("Heures :", now.Hour()) fmt.Println("Minutes :", now.Minute()) fmt.Println("Secondes :", now.Second()) fmt.Println("Nanosecondes :", now.Nanosecond()) fmt.Println("Jour de la semaine :", now.Weekday())}Création manuelle d'une date
Vous pouvez créer un instant précis avec la fonction time.Date(). Elle prend l'année, le mois, le jour, l'heure, la minute, la seconde, la nanoseconde et le fuseau horaire.
package main
import ( "fmt" "time")
func main() { // 15 mars 2025, 14:30:00, UTC specificDate := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Date créée :", specificDate)}Analyse et formatage des dates
Le format de référence de Go
Go utilise une approche unique pour le formatage : au lieu de codes comme YYYY-MM-DD, on utilise la date de référence Mon Jan 2 15:04:05 MST 2006 (ou en abrégé 2006-01-02T15:04:05Z07:00). Cela signifie que pour indiquer l'année, vous écrivez 2006, pour le mois — 01, pour le jour — 02, pour l'heure — 15 (ou 03 pour le format 12 heures), pour la minute — 04, pour la seconde — 05.
Formatage d'une date en chaîne
La méthode Format() convertit un time.Time en chaîne selon un modèle donné.
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Format standard :", now.Format("2006-01-02 15:04:05")) fmt.Println("Format français :", now.Format("02.01.2006 15:04")) fmt.Println("Date uniquement :", now.Format("02 Jan 2006")) fmt.Println("Format 12 heures :", now.Format("03:04:05 PM"))}Analyse d'une chaîne en date
La fonction time.Parse() convertit une chaîne en time.Time. Il est important que la chaîne corresponde au modèle.
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("Erreur d'analyse :", err) return } fmt.Println("Temps analysé :", parsedTime) fmt.Println("Jour de la semaine :", parsedTime.Weekday())}Analyse avec fuseau horaire
Pour les chaînes avec fuseau horaire, utilisez time.ParseInLocation() ou indiquez le décalage dans le modèle (Z07:00).
package main
import ( "fmt" "tim