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-26Die 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.
Aufgabe
EinfachErstelle 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:
- Die erste Eingabe durch Aufteilen an Doppelpunkten zu verarbeiten, um die Werte für Jahr, Monat, Tag, Stunde und Minute zu extrahieren
- Diese Zeichenkettenwerte mithilfe des Pakets
strconvin Ganzzahlen umzuwandeln - Ein
time.Time-Objekt mittime.Dateund den verarbeiteten Werten zu erstellen (verwendetime.UTCals Zeitzone sowie 0 für Sekunden und Nanosekunden) - Die Kopfzeile der Anwendung auszugeben:
"=== DATE/TIME FORMATTER ===" - Die Ausgangszeit auszugeben:
"Source time: [complete_time_object]" - Die zweite Eingabe durch Aufteilen an Kommas zu verarbeiten, um die Formatierungsanfragen zu erhalten
- Die Kopfzeile für die Formatierungen auszugeben:
"Formatted outputs:" - Für jede Formatierungsanfrage das passende Layout mit der Methode
Formatzu 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
- Für
- Statistiken zu berechnen und auszugeben:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 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"
- 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler