Travailler avec les dates et l'heure en Go : des bases aux techniques avancées
Le langage de programmation Go (Golang) offre un package time puissant et intuitif pour travailler avec les dates et l'heure. Contrairement à de nombreux autres langages, Go utilise une approche unique de formatage basée sur une date de référence (Mon Jan 2 15:04:05 MST 2006). Dans cet article, nous allons détailler tous les aspects clés : de la création d'objets temporels au travail avec les minuteries et les fuseaux horaires. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés qui passent à Go.
1. Bases : création, obtention et affichage de l'heure
Le type central pour le travail est time.Time. On obtient le moment actuel avec time.Now(). Pour créer une date spécifique, on utilise time.Date().
package main
import ( "fmt" "time")
func main() { // Heure actuelle now := time.Now() fmt.Println("Maintenant :", now)
// Création d'une date spécifique (année, mois, jour, heure, min, sec, nanosec, Location) specific := time.Date(2025, time.January, 15, 10, 30, 0, 0, time.UTC) fmt.Println("Date spécifique :", specific)
// Extraction des composants fmt.Println("Année :", now.Year()) fmt.Println("Mois :", now.Month()) fmt.Println("Jour :", now.Day()) fmt.Println("Heure :", now.Hour()) fmt.Println("Minute :", now.Minute()) fmt.Println("Seconde :", now.Second()) fmt.Println("Jour de la semaine :", now.Weekday())}La sortie du programme affichera l'heure actuelle et ses composants. Notez que time.Now() renvoie l'heure dans le fuseau horaire local du système.
2. Formatage et analyse : particularité distinctive de Go
En Go, le formatage des dates ne se fait pas avec des caractères comme YYYY-MM-DD, mais avec une date de référence : Mon Jan 2 15:04:05 MST 2006 (ou 01/02 03:04:05PM '06 -0700). Mémorisez cette chaîne magique — elle ressemble à 1 2 3 4 5 6 -7.
- 1 — mois (01, Jan, January)
- 2 — jour (02, 2)
- 3 — heure au format 12 heures (03, 3)
- 4 — minute (04, 4)
- 5 — seconde (05, 5)
- 6 — année (06, 2006)
- -7 — fuseau horaire (MST, -0700, -07:00)
Formatage (Time → String)
now := time.Now()
// Formats standardsfmt.Println(now.Format("2006-01-02 15:04:05")) // 2025-01-15 10:30:45fmt.Println(now.Format("02.01.2006")) // 15.01.2025fmt.Println(now.Format(time.RFC3339)) // 2025-01-15T10:30:45Zfmt.Println(now.Format("Mon, 02 Jan 2006 15:04:05 MST")) // Wed, 15 Jan 2025 10:30:45 UTCAnalyse (String → Time)
// Analyse d'une chaîne en time.TimedateStr := "2025-01-15 10:30:45"layout := "2006-01-02 15:04:05"parsedTime, err := time.Parse(layout, dateStr)if err != nil { panic(err)}fmt.Println("Analysé :", parsedTime)
// Analyse avec fuseau horairedateWithZone := "2025-01-15T10:30:45+03:00"parsedWithZone, _ := time.Parse(time.RFC3339, dateWithZone)fmt.Println("Avec fuseau :", parsedWithZone)Si vous devez analyser une date dans un fuseau horaire spécifique, utilisez time.ParseInLocation().
3. Opérations sur les dates : Duration, Add, Sub et comparaison
Le type time.Duration représente un intervalle de temps. Go fournit des constantes : Nanosecond, Microsecond, Millisecond, Second, Minute, Hour.
now := time.Now()
// Ajout de tempsfuture := now.Add(72 * time.Hour) // +3 joursfmt.Println("Dans 72 heures :", future)
// Soustraction de tempspast := now.Add(-30 * time.Minute) // 30 minutes avantfmt.P