Menu
CoddyTech

Zeit formatieren

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 60 von 68.

Sobald du ein time.Time-Objekt hast, musst du es oft in ein lesbares Zeichenfolgenformat umwandeln. Go verwendet einen einzigartigen Ansatz zur Zeitformatierung, der sich von dem anderer Programmiersprachen unterscheidet.

Statt Formatcodes wie %Y-%m-%d zu verwenden, nutzt Go ein Referenzdatum als Vorlage. Dieses Referenzdatum lautet Mon Jan 2 15:04:05 MST 2006 und steht für den genauen Zeitpunkt: den 2. Januar 2006 um 15:04:05 Uhr Mountain Standard Time.

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Ausgabe: 2023-10-26

Die entscheidende Erkenntnis ist, dass du die Komponenten des Referenzdatums in dem gewünschten Muster anordnest. Für ein Format wie YYYY-MM-DD verwendest du "2006-01-02", weil das Referenzdatum in diesem Muster so aussieht. Für ein anderes Format wie Jan 2, 2006 würdest du "Jan 2, 2006" verwenden.

Dieser layoutbasierte Ansatz macht die Zeitformatierung in Go sowohl einprägsam als auch flexibel. Sobald du dir das Referenzdatum gemerkt hast, kannst du jedes Format erstellen, indem du seine Bestandteile einfach in deinem gewünschten Muster anordnest.

challenge icon

Aufgabe

Einfach

Erstelle ein Datums- und Uhrzeitanzeigesystem mit mehreren Formaten, das time.Time-Objekte mithilfe von Gos einzigartigem Referenzdatums-Layoutsystem formatiert. Diese Herausforderung stellt deine Fähigkeit auf die Probe, die Methode Format mit verschiedenen Layoutmustern zu verwenden, um unterschiedliche Datums- und Uhrzeitdarstellungen zu erstellen.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette mit Datumsinformationen im Format "year:month:day:hour:minute" (z. B. "2023:12:25:14:30")
  • Eine Zeichenkette mit durch Kommas getrennten Formatierungsanfragen im Format "format1,format2,format3" (z. B. "iso,american,european,time12,time24")

Deine Aufgabe ist es:

  1. Die erste Eingabe durch Aufteilen an Doppelpunkten zu verarbeiten, um die Werte für Jahr, Monat, Tag, Stunde und Minute zu extrahieren
  2. Diese Zeichenkettenwerte mithilfe des Pakets strconv in Ganzzahlen umzuwandeln
  3. Ein time.Time-Objekt mit time.Date und den verarbeiteten Werten zu erstellen (verwende time.UTC als Zeitzone sowie 0 für Sekunden und Nanosekunden)
  4. Die Kopfzeile der Anwendung auszugeben: "=== DATE/TIME FORMATTER ==="
  5. Die Ausgangszeit auszugeben: "Source time: [complete_time_object]"
  6. Die zweite Eingabe durch Aufteilen an Kommas zu verarbeiten, um die Formatierungsanfragen zu erhalten
  7. Die Kopfzeile für die Formatierungen auszugeben: "Formatted outputs:"
  8. Für jede Formatierungsanfrage das passende Layout mit der Methode Format zu verwenden:
    • Für "iso": Das Layout "2006-01-02" verwenden und "ISO format: [formatted_result]" ausgeben
    • Für "american": Das Layout "01/02/2006" verwenden und "American format: [formatted_result]" ausgeben
    • Für "european": Das Layout "02/01/2006" verwenden und "European format: [formatted_result]" ausgeben
    • Für "long": Das Layout "January 2, 2006" verwenden und "Long format: [formatted_result]" ausgeben
    • Für "time12": Das Layout "3:04 PM" verwenden und "12-hour time: [formatted_result]" ausgeben
    • Für "time24": Das Layout "15:04" verwenden und "24-hour time: [formatted_result]" ausgeben
    • Für "full": Das Layout "Monday, January 2, 2006 at 3:04 PM" verwenden und "Full format: [formatted_result]" ausgeben
    • Für "compact": Das Layout "20060102" verwenden und "Compact format: [formatted_result]" ausgeben
  9. Statistiken zu berechnen und auszugeben:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Referenzinformationen auszugeben:
    • "=== 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. Die Abschlussmeldung auszugeben: "Date formatting completed using Go's layout system"

Verwende das Paket time für Zeitoperationen, das Paket strings zum Aufteilen von Eingabezeichenketten, das Paket strconv zum Umwandeln von Zeichenketten in Ganzzahlen und das Paket fmt für formatierte Ausgaben. Denke daran, dass Gos Zeitformatierung das Referenzdatum Mon Jan 2 15:04:05 MST 2006 als Vorlage verwendet und du diese Bestandteile im gewünschten Muster anordnest. Diese Herausforderung zeigt, wie Gos einzigartiges layoutbasiertes Formatierungssystem funktioniert, indem du mehrere unterschiedliche Formatierungsmuster auf dasselbe Zeitobjekt anwendest.

Probier es selbst

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Eingabe einlesen
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Datumsbestandteile durch Aufteilen an Doppelpunkten zerlegen
	dateComponents := strings.Split(dateInput, ":")
	
	// Zeichenfolgenbestandteile in Ganzzahlen umwandeln
	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])
	
	// time.Time-Objekt erstellen
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Formatierungsanfragen auswerten
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Schreibe deinen Code unten
	// Anwendungsüberschrift anzeigen
	// Ausgangszeit anzeigen
	// Jede Formatierungsanfrage verarbeiten und formatierte Ausgaben anzeigen
	// Statistiken berechnen und anzeigen
	// Referenzinformationen anzeigen
	// Abschlussmeldung anzeigen
	
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Go-Compiler