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.

Bien que time.Now() vous donne l’instant présent, vous devrez souvent travailler avec des dates et des heures précises. Go fournit la fonction time.Date pour créer un objet time.Time représentant la date et l’heure de votre choix.

La fonction time.Date accepte huit paramètres dans cet ordre exact : année, mois, jour, heure, minute, seconde, nanoseconde et emplacement. 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 d’emplacement 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, qu’il s’agisse d’un anniversaire, d’une échéance ou d’une date historique. L’objet time.Time obtenu fonctionne exactement comme celui de time.Now() et peut être utilisé avec toutes les mêmes opérations temporelles.

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 heures précises de l’histoire. Ce défi testera votre capacité à créer des objets time.Time correspondant à 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 séparant sur les virgules afin d’obtenir les différentes entrées d’événements
  2. Pour chaque entrée d’événement, la séparer sur les deux-points afin d’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 à l’aide de time.Date pour chaque événement (utiliser time.UTC comme paramètre d’emplacement, ainsi que 0 pour les secondes et les nanosecondes)
  4. Afficher l’en-tête de l’application : "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Afficher la confirmation de 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 séparant sur les virgules afin d’obtenir les options d’affichage
  8. Traiter chaque option d’affichage :
    • Pour "chronological" : afficher "=== CHRONOLOGICAL ORDER ===", suivi des événements triés par date (du plus ancien au plus récent), en affichant "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Pour "details" : afficher "=== DETAILED INFORMATION ===", suivi de chaque événement avec :
      • "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 regroupés par décennie, en affichant "[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 précises avec time.Date, le package strings pour séparer les chaînes d’entrée, le package strconv pour convertir les chaînes numériques en entiers, et le package fmt pour produire un affichage formaté. N’oubliez pas que time.Date accepte les paramètres dans l’ordre exact suivant : année, mois, jour, heure, minute, seconde, nanoseconde, emplacement. Pour trier les événements chronologiquement, vous pouvez comparer les objets time.Time à l’aide de la méthode Before(). Ce défi montre comment créer des moments précis et travailler avec des données historiques à l’aide des fonctionnalités temporelles de Go.

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 name, year, month, day, hour, minute
	// 2. N'oubliez pas de vérifier si le slice parts a suffisamment d'éléments avant d'y accéder
	// 3. Convertir les nombres sous forme de chaînes en entiers en utilisant 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. Process each display option (chronological, details, summary, years)
	// 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

Entraînez-vous par vous-même : Compilateur Go en ligne