Einen bestimmten Zeitpunkt erstellen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 59 von 68.
Während time.Now() dir den aktuellen Zeitpunkt liefert, musst du oft mit bestimmten Datums- und Zeitangaben arbeiten. Go stellt die Funktion time.Date zum Erstellen eines time.Time-Objekts bereit, das ein von dir angegebenes Datum und eine von dir angegebene Uhrzeit darstellt.
Die Funktion time.Date nimmt acht Parameter in genau dieser Reihenfolge entgegen: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde und Ort. Hier ist die grundlegende Syntax:
birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)Beachte, dass Go Konstanten wie time.March für Monate verwendet, wodurch dein Code lesbarer wird als bei der Verwendung von Zahlen. Du kannst auch Ganzzahlen (1-12) verwenden, wenn du möchtest. Der Standortparameter verwendet typischerweise time.UTC für die UTC-Zeit oder time.Local für die lokale Zeitzone deines Systems.
Dieser Ansatz gibt dir vollständige Kontrolle über die Erstellung jedes beliebigen konkreten Zeitpunkts, sei es ein Geburtstag, eine Deadline oder ein historisches Datum. Das resultierende time.Time-Objekt funktioniert genauso wie das aus time.Now() und kann mit denselben Zeitoperationen verwendet werden.
Aufgabe
EinfachErstelle eine Anwendung für eine Zeitleiste historischer Ereignisse, die time.Date verwendet, um bestimmte Daten und Uhrzeiten aus der Geschichte darzustellen. Diese Herausforderung testet deine Fähigkeit, time.Time-Objekte für präzise historische Zeitpunkte zu erstellen und sie in einem organisierten Format anzuzeigen.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit historischen Ereignissen im Format
"event1:year:month:day:hour:minute,event2:year:month:day:hour:minute"(z. B."Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0") - Eine Zeichenkette mit durch Kommas getrennten Anzeigeoptionen im Format
"option1,option2,option3"(z. B."chronological,details,summary")
Deine Aufgabe ist:
- Analysiere die erste Eingabe, indem du sie an Kommas aufteilst, um einzelne Ereigniseinträge zu erhalten
- Teile jeden Ereigniseintrag an Doppelpunkten auf, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
- Wandle die numerischen Zeichenketten in Ganzzahlen um und erstelle mit
time.Timefür jedes Ereignis eintime.Date-Objekt (verwendetime.UTCfür den Ortsparameter sowie 0 für Sekunden und Nanosekunden) - Zeige den Anwendungskopf an:
"=== HISTORICAL TIMELINE APPLICATION ===" - Zeige die Bestätigung für das Laden der Ereignisse an:
"Loading historical events..." - Zeige für jedes Ereignis Folgendes an:
"Loaded: [event_name] - [complete_time_object]" - Analysiere die zweite Eingabe, indem du sie an Kommas aufteilst, um die Anzeigeoptionen zu erhalten
- Verarbeite jede Anzeigeoption:
- Für
"chronological": Zeige"=== CHRONOLOGICAL ORDER ==="an, gefolgt von den nach Datum sortierten Ereignissen (frühestes zuerst), wobei"[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"angezeigt wird - Für
"details": Zeige"=== DETAILED INFORMATION ==="an, gefolgt von jedem Ereignis mit:"Event: [event_name]"" Date: [year]-[month]-[day]"" Time: [hour]:[minute] UTC"" Weekday: [weekday_name]"" Unix timestamp: [unix_seconds]"
- Für
"summary": Zeige"=== TIMELINE SUMMARY ==="an, gefolgt von:"Total events: [number_of_events]""Earliest event: [earliest_event_name] ([year])""Latest event: [latest_event_name] ([year])""Time span: [years_between_earliest_and_latest] years"
- Für
"years": Zeige"=== EVENTS BY DECADE ==="an, gefolgt von nach Jahrzehnten gruppierten Ereignissen, wobei"[decade]s: [comma_separated_event_names]"angezeigt wird - Zeige die Abschlussmeldung an:
"Historical timeline processing completed"
Verwende das Paket time, um mit time.Date bestimmte Daten zu erstellen, das Paket strings, um Eingabezeichenketten aufzuteilen, das Paket strconv, um Zahlzeichenketten in Ganzzahlen umzuwandeln, und das Paket fmt für die formatierte Ausgabe. Denke daran, dass time.Date die Parameter in genau dieser Reihenfolge erwartet: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde, Ort. Für die chronologische Sortierung kannst du time.Time-Objekte mithilfe der Methode Before() vergleichen. Diese Herausforderung zeigt, wie man bestimmte Zeitpunkte erstellt und mithilfe der Zeitfunktionen von Go mit historischen Daten arbeitet.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
"time"
)
func main() {
// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu verarbeiten
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
eventsInput := scanner.Text()
scanner.Scan()
optionsInput := scanner.Text()
// Ereignisse aus der Eingabe parsen
eventEntries := strings.Split(eventsInput, ",")
// Anzeigeoptionen aus der Eingabe parsen
displayOptions := strings.Split(optionsInput, ",")
// TODO: Schreibe deinen Code darunter
// 1. Jeden Ereigniseintrag parsen, um Name, Jahr, Monat, Tag, Stunde, Minute zu extrahieren
// 2. Denk daran zu prüfen, ob der parts-Slice genügend Elemente hat, bevor du darauf zugreifst
// 3. Zeichenkettenzahlen mit strconv.Atoi() in Ganzzahlen umwandeln
// 4. time.Time-Objekte mit time.Date() für jedes Ereignis erstellen
// 5. Den Anwendungskopf und Lademeldungen anzeigen
// 6. Process each display option (chronological, details, summary, years)
// 7. Die 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ügen7Fehlerbehandlung im Detail
Benutzerdefinierte FehlertypenFehler-Wrapping mit `%w`Unwrapping mit `errors.Is`Unwrapping mit `errors.As``panic` verstehen`recover` verwendenZusammenfassung – Sichere Division10Arbeiten mit Zeit
Aktuelle Zeit abrufenEinen bestimmten Zeitpunkt erstellenZeit formatierenZeit-Strings parsenZeitdauerZeitarithmetikSleeping und TickerZusammenfassung – Einfacher Timer2Structs 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