Formatage de l'heure
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 60 sur 68.
Une fois que vous avez un objet time.Time, vous aurez souvent besoin de le convertir dans un format de chaîne lisible. Go utilise une approche unique pour le formatage de l'heure qui est différente des autres langages de programmation.
Au lieu d'utiliser des codes de formatage 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 clé est que vous disposez les composants de la date de référence selon le modèle que vous souhaitez. Pour un format YYYY-MM-DD, vous utilisez "2006-01-02" parce que c'est ainsi que la date de référence apparaît dans ce modèle. Pour un format différent comme Jan 2, 2006, vous utiliseriez "Jan 2, 2006".
Cette approche basée sur le format rend le formatage de l'heure de Go à la fois mémorable et flexible. Une fois que vous vous souvenez de la date de référence, vous pouvez créer n'importe quel format en agençant simplement ses composants selon le modèle souhaité.
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 un système d'affichage de date et d'heure multi-format qui formate les objets time.Time en utilisant le système de mise en page de date de référence unique de Go. Ce défi testera votre capacité à utiliser la méthode Format avec différents modèles de mise en page pour créer diverses représentations de date et d'heure.
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 divisant par les deux-points pour extraire les valeurs de l'année, du mois, du jour, de l'heure et de la minute
- Convertir ces valeurs de chaîne en entiers à l'aide du package
strconv - Créer un objet
time.Timeen utilisanttime.Dateavec les valeurs analysées (utiliseztime.UTCpour la localisation, 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 divisant par les virgules pour obtenir les demandes de format
- Afficher l'en-tête de formatage :
"Formatted outputs:" - Pour chaque demande de format, utilisez la chaîne de mise en page appropriée avec la méthode
Format:- Pour
"iso": Utilisez la mise en page"2006-01-02"et affichez"ISO format: [formatted_result]" - Pour
"american": Utilisez la mise en page"01/02/2006"et affichez"American format: [formatted_result]" - Pour
"european": Utilisez la mise en page"02/01/2006"et affichez"European format: [formatted_result]" - Pour
"long": Utilisez la mise en page"January 2, 2006"et affichez"Long format: [formatted_result]" - Pour
"time12": Utilisez la mise en page"3:04 PM"et affichez"12-hour time: [formatted_result]" - Pour
"time24": Utilisez la mise en page"15:04"et affichez"24-hour time: [formatted_result]" - Pour
"full": Utilisez la mise en page"Monday, January 2, 2006 at 3:04 PM"et affichez"Full format: [formatted_result]" - Pour
"compact": Utilisez la mise en page"20060102"et affichez"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 package time pour les opérations temporelles, le package strings pour diviser les chaînes d'entrée, le package strconv pour convertir les chaînes en entiers, et le package fmt pour la sortie formatée. N'oubliez pas que le formatage de l'heure de Go utilise la date de référence Mon Jan 2 15:04:05 MST 2006 comme modèle, et que vous organisez ces composants selon le modèle souhaité. Ce défi démontre le fonctionnement du système de formatage unique basé sur la mise en page de Go en vous faisant appliquer plusieurs modèles de format différents au même objet temporel.
Aide-mémoire
Go utilise une approche unique de date de référence pour le formatage de l'heure : Mon Jan 2 15:04:05 MST 2006
Pour formater un objet time.Time, utilisez la méthode Format avec des modèles de mise en page basés sur la date de référence :
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Sortie : 2023-10-26Modèles de mise en page courants :
"2006-01-02"- Format ISO (AAAA-MM-JJ)"01/02/2006"- Format américain (MM/JJ/AAAA)"02/01/2006"- Format européen (JJ/MM/AAAA)"January 2, 2006"- Format long"3:04 PM"- Heure au format 12 heures"15:04"- Heure au format 24 heures"Monday, January 2, 2006 at 3:04 PM"- Format complet"20060102"- Format compact
La clé est de disposer les composants de la date de référence selon le modèle souhaité.
Essayez vous-même
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Lire l'entrée
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// Analyser les composants de la date en les séparant par des deux-points
dateComponents := strings.Split(dateInput, ":")
// Convertir les composants de type chaîne 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: Écrivez votre code ci-dessous
// Afficher l'en-tête de l'application
// Afficher l'heure source
// Traiter chaque demande de format et afficher les sorties formatées
// 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 comportements