Menu
Coddy logo textTech

Zeit formatieren

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

Sobald Sie ein time.Time-Objekt haben, müssen Sie es oft in ein lesbares String-Format konvertieren. Go verwendet einen einzigartigen Ansatz zur Zeitformatierung, der sich von anderen Programmiersprachen unterscheidet.

Anstatt Formatcodes wie %Y-%m-%d zu verwenden, nutzt Go ein Referenzdatum als Vorlage. Dieses Referenzdatum ist Mon Jan 2 15:04:05 MST 2006, welches den exakten Moment darstellt: 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 Sie die Komponenten des Referenzdatums in dem von Ihnen gewünschten Muster anordnen. Für ein YYYY-MM-DD-Format verwenden Sie "2006-01-02", da das Referenzdatum in diesem Muster so aussieht. Für ein anderes Format wie Jan 2, 2006 würden Sie "Jan 2, 2006" verwenden.

Dieser layoutbasierte Ansatz macht die Zeitformatierung in Go sowohl einprägsam als auch flexibel. Sobald Sie sich das Referenzdatum gemerkt haben, können Sie jedes beliebige Format erstellen, indem Sie dessen Komponenten einfach in Ihrem gewünschten Muster anordnen.

quiz iconTeste dich selbst

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

quiz iconTeste dich selbst

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

quiz iconTeste dich selbst

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

challenge icon

Aufgabe

Einfach

Erstellen Sie ein System zur Anzeige von Datum und Uhrzeit in mehreren Formaten, das time.Time-Objekte mithilfe des einzigartigen Referenzdatum-Layout-Systems von Go formatiert. Diese Herausforderung testet Ihre Fähigkeit, die Methode Format mit verschiedenen Layout-Mustern zu verwenden, um unterschiedliche Datums- und Zeitdarstellungen zu erstellen.

Sie erhalten zwei Eingaben:

  • Einen String, der Datumsinformationen im Format "year:month:day:hour:minute" enthält (z. B. "2023:12:25:14:30")
  • Einen String, der durch Kommas getrennte Formatanfragen im Format "format1,format2,format3" enthält (z. B. "iso,american,european,time12,time24")

Ihre Aufgabe ist es:

  1. Die erste Eingabe durch Aufteilen an den Doppelpunkten zu parsen, um Jahr, Monat, Tag, Stunde und Minutenwerte zu extrahieren
  2. Diese String-Werte mithilfe des Pakets strconv in Ganzzahlen umzuwandeln
  3. Ein time.Time-Objekt mit time.Date und den geparsten Werten zu erstellen (verwenden Sie time.UTC für den Ort, 0 für Sekunden und Nanosekunden)
  4. Den Anwendungs-Header anzuzeigen: "=== DATE/TIME FORMATTER ==="
  5. Die Quellzeit anzuzeigen: "Source time: [complete_time_object]"
  6. Die zweite Eingabe durch Aufteilen an den Kommas zu parsen, um die Formatanfragen zu erhalten
  7. Den Formatierungs-Header anzuzeigen: "Formatted outputs:"
  8. Für jede Formatanfrage den entsprechenden Layout-String mit der Methode Format zu verwenden:
    • Für "iso": Verwenden Sie das Layout "2006-01-02" und zeigen Sie "ISO format: [formatted_result]" an
    • Für "american": Verwenden Sie das Layout "01/02/2006" und zeigen Sie "American format: [formatted_result]" an
    • Für "european": Verwenden Sie das Layout "02/01/2006" und zeigen Sie "European format: [formatted_result]" an
    • Für "long": Verwenden Sie das Layout "January 2, 2006" und zeigen Sie "Long format: [formatted_result]" an
    • Für "time12": Verwenden Sie das Layout "3:04 PM" und zeigen Sie "12-hour time: [formatted_result]" an
    • Für "time24": Verwenden Sie das Layout "15:04" und zeigen Sie "24-hour time: [formatted_result]" an
    • Für "full": Verwenden Sie das Layout "Monday, January 2, 2006 at 3:04 PM" und zeigen Sie "Full format: [formatted_result]" an
    • Für "compact": Verwenden Sie das Layout "20060102" und zeigen Sie "Compact format: [formatted_result]" an
  9. Statistiken berechnen und anzeigen:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Referenzinformationen anzeigen:
    • "=== 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 anzeigen: "Date formatting completed using Go's layout system"

Verwenden Sie das Paket time für Zeitoperationen, das Paket strings zum Aufteilen von Eingabestrings, das Paket strconv zum Umwandeln von Strings in Ganzzahlen und das Paket fmt für die formatierte Ausgabe. Denken Sie daran, dass die Zeitformatierung in Go das Referenzdatum Mon Jan 2 15:04:05 MST 2006 als Vorlage verwendet und Sie diese Komponenten in dem von Ihnen gewünschten Muster anordnen. Diese Herausforderung demonstriert, wie das einzigartige layoutbasierte Formatierungssystem von Go funktioniert, indem Sie mehrere verschiedene Formatmuster auf dasselbe Zeitobjekt anwenden.

Spickzettel

Go verwendet einen einzigartigen Referenzdatum-Ansatz für die Zeitformatierung: Mon Jan 2 15:04:05 MST 2006

Um ein time.Time-Objekt zu formatieren, verwenden Sie die Format-Methode mit Layout-Mustern, die auf dem Referenzdatum basieren:

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

Gängige Layout-Muster:

  • "2006-01-02" - ISO-Format (JJJJ-MM-TT)
  • "01/02/2006" - Amerikanisches Format (MM/TT/JJJJ)
  • "02/01/2006" - Europäisches Format (TT/MM/JJJJ)
  • "January 2, 2006" - Langformat
  • "3:04 PM" - 12-Stunden-Zeit
  • "15:04" - 24-Stunden-Zeit
  • "Monday, January 2, 2006 at 3:04 PM" - Vollständiges Format
  • "20060102" - Kompaktformat

Der Schlüssel liegt darin, die Komponenten des Referenzdatums in Ihrem gewünschten Muster anzuordnen.

Probier es selbst

package main

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

func main() {
	// Eingabe lesen
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Datumskomponenten durch Aufteilen an Doppelpunkten parsen
	dateComponents := strings.Split(dateInput, ":")
	
	// String-Komponenten 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)
	
	// Formatanfragen parsen
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Schreiben Sie Ihren Code unten
	// Anwendungs-Header anzeigen
	// Quellzeit anzeigen
	// Jede Formatanfrage 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