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-26Die 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.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen 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:
- Die erste Eingabe durch Aufteilen an den Doppelpunkten zu parsen, um Jahr, Monat, Tag, Stunde und Minutenwerte zu extrahieren
- Diese String-Werte mithilfe des Pakets
strconvin Ganzzahlen umzuwandeln - Ein
time.Time-Objekt mittime.Dateund den geparsten Werten zu erstellen (verwenden Sietime.UTCfür den Ort, 0 für Sekunden und Nanosekunden) - Den Anwendungs-Header anzuzeigen:
"=== DATE/TIME FORMATTER ===" - Die Quellzeit anzuzeigen:
"Source time: [complete_time_object]" - Die zweite Eingabe durch Aufteilen an den Kommas zu parsen, um die Formatanfragen zu erhalten
- Den Formatierungs-Header anzuzeigen:
"Formatted outputs:" - Für jede Formatanfrage den entsprechenden Layout-String mit der Methode
Formatzu 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
- Für
- Statistiken berechnen und anzeigen:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 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"
- 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-26Gä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
}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