Einen bestimmten Zeitpunkt erstellen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 59 von 68.
Während time.Now() Ihnen den aktuellen Moment liefert, müssen Sie oft mit spezifischen Daten und Zeiten arbeiten. Go bietet die time.Date-Funktion zum Erstellen eines time.Time-Objekts an, das ein beliebiges von Ihnen angegebenes Datum und eine beliebige Uhrzeit darstellt.
Die Funktion time.Date nimmt sieben Parameter in genau dieser Reihenfolge entgegen: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde und Standort (Location). Hier ist die grundlegende Syntax:
birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)Beachten Sie, dass Go Konstanten wie time.March für Monate verwendet, was Ihren Code lesbarer macht als die Verwendung von Zahlen. Sie können auch Ganzzahlen (1-12) verwenden, wenn Sie dies bevorzugen. Der Standortparameter verwendet normalerweise time.UTC für die UTC-Zeit oder time.Local für die lokale Zeitzone Ihres Systems.
Dieser Ansatz gibt Ihnen die vollständige Kontrolle über die Erstellung jedes spezifischen Zeitpunkts, sei es ein Geburtstag, eine Frist oder ein historisches Datum. Das resultierende time.Time-Objekt funktioniert genau wie das von time.Now() und kann mit all denselben Zeitoperationen verwendet werden.
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 eine Anwendung für eine historische Ereignis-Timeline, die time.Date verwendet, um spezifische Daten und Zeiten aus der Geschichte darzustellen. Diese Herausforderung testet Ihre Fähigkeit, time.Time-Objekte für präzise historische Momente zu erstellen und diese in einem organisierten Format anzuzeigen.
Sie erhalten zwei Eingaben:
- Einen String, der historische Ereignisse im Format
"event1:year:month:day:hour:minute,event2:year:month:day:hour:minute"enthält (z. B."Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0") - Einen String, der Anzeigeoptionen enthält, getrennt durch Kommas im Format
"option1,option2,option3"(z. B."chronological,details,summary")
Ihre Aufgabe ist es:
- Die erste Eingabe zu parsen, indem Sie sie an den Kommas aufteilen, um die einzelnen Ereigniseinträge zu erhalten
- Für jeden Ereigniseintrag die Doppelpunkte aufzuteilen, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
- Die numerischen Strings in Ganzzahlen umzuwandeln und für jedes Ereignis ein
time.Time-Objekt mittime.Datezu erstellen (verwenden Sietime.UTCfür den Standortparameter und 0 für Sekunden und Nanosekunden) - Den Header der Anwendung anzuzeigen:
"=== HISTORICAL TIMELINE APPLICATION ===" - Die Bestätigung für das Laden der Ereignisse anzuzeigen:
"Loading historical events..." - Für jedes Ereignis anzuzeigen:
"Loaded: [event_name] - [complete_time_object]" - Die zweite Eingabe zu parsen, indem Sie sie an den Kommas aufteilen, um die Anzeigeoptionen zu erhalten
- Jede Anzeigeoption zu verarbeiten:
- Für
"chronological": Zeigen Sie"=== CHRONOLOGICAL ORDER ==="an, gefolgt von den nach Datum sortierten Ereignissen (das früheste zuerst), im Format"[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC" - Für
"details": Zeigen Sie"=== 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": Zeigen Sie"=== 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": Zeigen Sie"=== EVENTS BY DECADE ==="an, gefolgt von den nach Jahrzehnten gruppierten Ereignissen, im Format"[decade]s: [comma_separated_event_names]" - Die Abschlussmeldung anzuzeigen:
"Historical timeline processing completed"
Verwenden Sie das time-Paket, um spezifische Daten mit time.Date zu erstellen, das strings-Paket, um Eingabestrings aufzuteilen, das strconv-Paket, um String-Zahlen in Ganzzahlen umzuwandeln, und das fmt-Paket für die formatierte Ausgabe. Denken Sie daran, dass time.Date Parameter in der exakten Reihenfolge erwartet: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde, Standort. Für die chronologische Sortierung können Sie time.Time-Objekte mit der Methode Before() vergleichen. Diese Herausforderung zeigt, wie man spezifische Zeitpunkte erstellt und mit historischen Daten unter Verwendung der Zeitfunktionalität von Go arbeitet.
Spickzettel
Verwenden Sie time.Date, um ein time.Time-Objekt für ein bestimmtes Datum und eine bestimmte Uhrzeit zu erstellen:
birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)Die Funktion time.Date nimmt sieben Parameter in der exakten Reihenfolge entgegen:
- Jahr (int)
- Monat (time.Month oder int 1-12)
- Tag (int)
- Stunde (int)
- Minute (int)
- Sekunde (int)
- Nanosekunde (int)
- Standort (*time.Location)
Verwenden Sie Monatskonstanten wie time.March für die Lesbarkeit oder Ganzzahlen (1-12). Gängige Standorte sind time.UTC und time.Local.
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: Schreiben Sie Ihren Code unten
// 1. Jeden Ereigniseintrag parsen, um Name, Jahr, Monat, Tag, Stunde, Minute zu extrahieren
// 2. Denken Sie daran zu prüfen, ob der Parts-Slice genügend Elemente hat, bevor Sie darauf zugreifen
// 3. String-Zahlen mit strconv.Atoi() in Ganzzahlen umwandeln
// 4. time.Time-Objekte mit time.Date() für jedes Ereignis erstellen
// 5. Anwendungs-Header und Lade-Meldungen anzeigen
// 6. Jede Anzeigeoption verarbeiten (chronologisch, Details, Zusammenfassung, Jahre)
// 7. 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