Formatage de l'heure
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 60 sur 68.
Une fois que tu as un objet time.Time, tu auras souvent besoin de le convertir en une chaîne lisible. Go utilise une approche unique pour le formatage de l’heure, différente de celle des autres langages de programmation.
Au lieu d’utiliser des codes de format comme %Y-%m-%d, Go utilise une date de référence comme modèle. Cette date de référence est Mon Jan 2 15:04:05 MST 2006, qui représente le moment exact : le 2 janvier 2006 à 15:04:05, heure normale des Rocheuses.
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Sortie : 2023-10-26L’idée essentielle est de disposer les composants de la date de référence selon le modèle souhaité. Pour un format YYYY-MM-DD, tu utilises "2006-01-02", car c’est ainsi que la date de référence s’affiche selon ce modèle. Pour un autre format comme Jan 2, 2006, tu utiliserais "Jan 2, 2006".
Cette approche basée sur une disposition rend le formatage de l’heure en Go à la fois mémorable et flexible. Une fois que tu te souviens de la date de référence, tu peux créer n’importe quel format en organisant simplement ses composants selon le modèle souhaité.
Défi
FacileCréez un système d’affichage de dates et d’heures en plusieurs formats qui formate des objets time.Time à l’aide du système unique de mise en page de Go fondé sur une date de référence. Ce défi mettra à l’épreuve votre capacité à utiliser la méthode Format avec différents modèles de mise en page afin de créer diverses représentations de dates et d’heures.
Vous recevrez deux entrées :
- Une chaîne contenant des informations de date au format
"year:month:day:hour:minute"(par exemple,"2023:12:25:14:30") - Une chaîne contenant des demandes de format séparées par des virgules au format
"format1,format2,format3"(par exemple,"iso,american,european,time12,time24")
Votre tâche consiste à :
- Analyser la première entrée en la séparant au niveau des deux-points afin d’extraire les valeurs de l’année, du mois, du jour, de l’heure et des minutes
- Convertir ces valeurs de chaîne en entiers à l’aide du paquet
strconv - Créer un objet
time.Timeà l’aide detime.Dateet des valeurs analysées (utiliseztime.UTCpour le fuseau horaire, et 0 pour les secondes et les nanosecondes) - Afficher l’en-tête de l’application :
"=== DATE/TIME FORMATTER ===" - Afficher l’heure source :
"Source time: [complete_time_object]" - Analyser la deuxième entrée en la séparant au niveau des virgules afin d’obtenir les demandes de format
- Afficher l’en-tête de mise en forme :
"Formatted outputs:" - Pour chaque demande de format, utiliser la chaîne de mise en page appropriée avec la méthode
Format:- Pour
"iso": utiliser la mise en page"2006-01-02"et afficher"ISO format: [formatted_result]" - Pour
"american": utiliser la mise en page"01/02/2006"et afficher"American format: [formatted_result]" - Pour
"european": utiliser la mise en page"02/01/2006"et afficher"European format: [formatted_result]" - Pour
"long": utiliser la mise en page"January 2, 2006"et afficher"Long format: [formatted_result]" - Pour
"time12": utiliser la mise en page"3:04 PM"et afficher"12-hour time: [formatted_result]" - Pour
"time24": utiliser la mise en page"15:04"et afficher"24-hour time: [formatted_result]" - Pour
"full": utiliser la mise en page"Monday, January 2, 2006 at 3:04 PM"et afficher"Full format: [formatted_result]" - Pour
"compact": utiliser la mise en page"20060102"et afficher"Compact format: [formatted_result]"
- Pour
- Calculer et afficher les statistiques :
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- Afficher les informations de référence :
"=== REFERENCE DATE INFO ===""Go uses reference date: Mon Jan 2 15:04:05 MST 2006""This represents: January 2nd, 2006 at 3:04:05 PM""Layout patterns arrange these components as needed"
- Afficher le message de fin :
"Date formatting completed using Go's layout system"
Utilisez le paquet time pour les opérations sur les heures, le paquet strings pour séparer les chaînes d’entrée, le paquet strconv pour convertir les chaînes en entiers et le paquet fmt pour la sortie formatée. N’oubliez pas que le formatage des heures dans Go utilise la date de référence Mon Jan 2 15:04:05 MST 2006 comme modèle, et que vous disposez ces éléments selon le modèle souhaité. Ce défi montre le fonctionnement du système unique de formatage de Go fondé sur des mises en page en vous faisant appliquer plusieurs modèles de format différents au même objet horaire.
Essayez vous-même
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Lire les données d'entrée
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// Analyser les composants de la date en les séparant aux deux-points
dateComponents := strings.Split(dateInput, ":")
// Convertir les composants textuels en entiers
year, _ := strconv.Atoi(dateComponents[0])
month, _ := strconv.Atoi(dateComponents[1])
day, _ := strconv.Atoi(dateComponents[2])
hour, _ := strconv.Atoi(dateComponents[3])
minute, _ := strconv.Atoi(dateComponents[4])
// Créer un objet time.Time
sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
// Analyser les demandes de format
formatRequests := strings.Split(formatInput, ",")
// TODO: Écrire votre code ci-dessous
// Afficher l'en-tête de l'application
// Afficher l'heure source
// Traiter chaque demande de format et afficher les résultats formatés
// Calculer et afficher les statistiques
// Afficher les informations de référence
// 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