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.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileCré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 à :
- Analyser la première entrée en la découpant par les virgules pour obtenir les entrées d'événements individuelles
- 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
- Convertir les chaînes numériques en entiers et créer un objet
time.Timeen utilisanttime.Datepour chaque événement (utiliseztime.UTCpour le paramètre de localisation et 0 pour les secondes et les nanosecondes) - Afficher l'en-tête de l'application :
"=== HISTORICAL TIMELINE APPLICATION ===" - Afficher la confirmation du 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 découpant par les virgules pour obtenir les options d'affichage
- 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]" - 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
}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 comportements