Menu
Coddy logo textTech

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-26

L'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é.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Cré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 à :

  1. 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
  2. Convertir ces valeurs de chaîne en entiers à l'aide du package strconv
  3. Créer un objet time.Time en utilisant time.Date avec les valeurs analysées (utilisez time.UTC pour la localisation, 0 pour les secondes et les nanosecondes)
  4. Afficher l'en-tête de l'application : "=== DATE/TIME FORMATTER ==="
  5. Afficher l'heure source : "Source time: [complete_time_object]"
  6. Analyser la deuxième entrée en la divisant par les virgules pour obtenir les demandes de format
  7. Afficher l'en-tête de formatage : "Formatted outputs:"
  8. 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]"
  9. Calculer et afficher les statistiques :
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. 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"
  11. 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-26

Modè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
	
}
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