Menu
Coddy logo textTech

Créer une heure spécifique

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 59 sur 68.

Alors que time.Now() vous donne l'instant présent, vous aurez souvent besoin de travailler avec des dates et des heures spécifiques. Go fournit la fonction time.Date pour créer un objet time.Time représentant n'importe quelle date et heure que vous spécifiez.

La fonction time.Date prend sept paramètres dans cet ordre exact : l'année, le mois, le jour, l'heure, la minute, la seconde, la nanoseconde et la localisation (location). Voici la syntaxe de base :

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Remarquez que Go utilise des constantes comme time.March pour les mois, ce qui rend votre code plus lisible que l'utilisation de nombres. Vous pouvez également utiliser des entiers (1-12) si vous préférez. Le paramètre de localisation utilise généralement time.UTC pour l'heure UTC ou time.Local pour le fuseau horaire local de votre système.

Cette approche vous donne un contrôle total sur la création de n'importe quel moment précis dans le temps, qu'il s'agisse d'un anniversaire, d'une échéance ou d'une date historique. L'objet time.Time résultant fonctionne exactement comme celui de time.Now() et peut être utilisé avec toutes les mêmes opérations temporelles.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Créez une application de chronologie d'événements historiques qui utilise time.Date pour représenter des dates et des heures spécifiques de l'histoire. Ce défi testera votre capacité à créer des objets time.Time pour des moments historiques précis et à les afficher dans un format organisé.

Vous recevrez deux entrées :

  • Une chaîne contenant des événements historiques au format "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (par exemple, "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • Une chaîne contenant des options d'affichage séparées par des virgules au format "option1,option2,option3" (par exemple, "chronological,details,summary")

Votre tâche consiste à :

  1. Analyser la première entrée en la découpant par les virgules pour obtenir les entrées d'événements individuelles
  2. Pour chaque entrée d'événement, découper par les deux-points pour extraire le nom de l'événement, l'année, le mois, le jour, l'heure et la minute
  3. Convertir les chaînes numériques en entiers et créer un objet time.Time en utilisant time.Date pour chaque événement (utilisez time.UTC pour le paramètre de localisation et 0 pour les secondes et les nanosecondes)
  4. Afficher l'en-tête de l'application : "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Afficher la confirmation du chargement des événements : "Loading historical events..."
  6. Pour chaque événement, afficher : "Loaded: [event_name] - [complete_time_object]"
  7. Analyser la deuxième entrée en la découpant par les virgules pour obtenir les options d'affichage
  8. Traiter chaque option d'affichage :
    • Pour "chronological" : Afficher "=== CHRONOLOGICAL ORDER ===" suivi des événements triés par date (le plus ancien en premier), en montrant "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Pour "details" : Afficher "=== DETAILED INFORMATION ===" suivi de chaque événement montrant :
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • Pour "summary" : Afficher "=== TIMELINE SUMMARY ===" suivi de :
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • Pour "years" : Afficher "=== EVENTS BY DECADE ===" suivi des événements groupés par décennie, en montrant "[decade]s: [comma_separated_event_names]"
  9. Afficher le message de fin : "Historical timeline processing completed"

Utilisez le package time pour créer des dates spécifiques avec time.Date, le package strings pour découper les chaînes d'entrée, le package strconv pour convertir les nombres sous forme de chaînes en entiers, et le package fmt pour la sortie formatée. N'oubliez pas que time.Date prend les paramètres dans l'ordre exact : année, mois, jour, heure, minute, seconde, nanoseconde, localisation. Pour le tri chronologique, vous pouvez comparer les objets time.Time en utilisant la méthode Before(). Ce défi démontre comment créer des moments précis dans le temps et travailler avec des données historiques en utilisant les fonctionnalités de temps de Go.

Aide-mémoire

Utilisez time.Date pour créer un objet time.Time pour une date et une heure spécifiques :

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

La fonction time.Date prend huit paramètres dans l'ordre exact :

  • année (int)
  • mois (time.Month ou int 1-12)
  • jour (int)
  • heure (int)
  • minute (int)
  • seconde (int)
  • nanoseconde (int)
  • emplacement (*time.Location)

Utilisez des constantes de mois comme time.March pour la lisibilité, ou des entiers (1-12). Les emplacements courants sont time.UTC et time.Local.

Essayez vous-même

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Lire l'entrée en utilisant bufio.Scanner pour gérer correctement les espaces
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Analyser les événements à partir de l'entrée
	eventEntries := strings.Split(eventsInput, ",")
	
	// Analyser les options d'affichage à partir de l'entrée
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Écrivez votre code ci-dessous
	// 1. Analyser chaque entrée d'événement pour extraire le nom, l'année, le mois, le jour, l'heure, la minute
	// 2. N'oubliez pas de vérifier si la tranche (slice) des parties a suffisamment d'éléments avant d'y accéder
	// 3. Convertir les nombres sous forme de chaînes en entiers à l'aide de strconv.Atoi()
	// 4. Créer des objets time.Time en utilisant time.Date() pour chaque événement
	// 5. Afficher l'en-tête de l'application et les messages de chargement
	// 6. Traiter chaque option d'affichage (chronologique, détails, résumé, années)
	// 7. Afficher le message de fin
	
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux