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.
Défi
FacileCré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 à :
- Analyser la première entrée en la séparant sur les virgules afin d’obtenir les différentes entrées d’événements
- 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
- Convertir les chaînes numériques en entiers et créer un objet
time.Timeà l’aide detime.Datepour chaque événement (utilisertime.UTCcomme paramètre d’emplacement, ainsi que 0 pour les secondes et les nanosecondes) - Afficher l’en-tête de l’application :
"=== HISTORICAL TIMELINE APPLICATION ===" - Afficher la confirmation de chargement des événements :
"Loading historical events..." - Pour chaque événement, afficher :
"Loaded: [event_name] - [complete_time_object]" - Analyser la deuxième entrée en la séparant sur les virgules afin d’obtenir les options d’affichage
- 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]"
- Pour
- 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
}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
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche7Gestion des erreurs en profondeur
Types d'erreurs personnalisésEnvelopper des erreurs avec `%w`Désenvelopper avec `errors.Is`Désenvelopper avec `errors.As`Comprendre `panic`Utiliser `recover`Récapitulatif - Division sécurisée10Travailler avec le temps
Obtenir l'heure actuelleCréer une heure spécifiqueFormatage de l'heureParsing de chaînes de tempsDurée temporelleArithmétique temporelleSleep et TickersRécapitulatif - Minuteur simple2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportementsEntraînez-vous par vous-même : Compilateur Go en ligne