Menu
Coddy logo textTech

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 bestimmten Daten und Zeiten arbeiten. Go bietet die Funktion time.Date zum Erstellen eines time.Time-Objekts, das ein beliebiges von Ihnen angegebenes Datum und eine beliebige Zeit darstellt.

Die time.Date-Funktion nimmt acht 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 location-Parameter 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.

challenge icon

Aufgabe

Einfach

Erstellen 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:

  1. Die erste Eingabe zu parsen, indem Sie sie an den Kommas trennen, um einzelne Ereigniseinträge zu erhalten
  2. Für jeden Ereigniseintrag an den Doppelpunkten zu trennen, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
  3. Die numerischen Strings in Ganzzahlen umzuwandeln und ein time.Time-Objekt unter Verwendung von time.Date für jedes Ereignis zu erstellen (verwenden Sie time.UTC für den Standortparameter und 0 für Sekunden und Nanosekunden)
  4. Den Anwendungs-Header anzuzeigen: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Die Bestätigung für das Laden der Ereignisse anzuzeigen: "Loading historical events..."
  6. Für jedes Ereignis anzuzeigen: "Loaded: [event_name] - [complete_time_object]"
  7. Die zweite Eingabe zu parsen, indem Sie sie an den Kommas trennen, um die Anzeigeoptionen zu erhalten
  8. 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]"
  9. 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 zu trennen, 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 demonstriert, wie man spezifische Zeitpunkte erstellt und mit historischen Daten unter Verwendung der Zeitfunktionalität von Go 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()
	
	// Events aus der Eingabe parsen
	eventEntries := strings.Split(eventsInput, ",")
	
	// Anzeigeoptionen aus der Eingabe parsen
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Schreibe deinen Code unten
	// 1. Jeden Event-Eintrag parsen, um name, year, month, day, hour, minute zu extrahieren
	// 2. Denke daran zu prüfen, ob der parts Slice genügend Elemente hat, bevor darauf zugegriffen wird
	// 3. String-Zahlen mit strconv.Atoi() in Integer umwandeln
	// 4. time.Time Objekte mit time.Date() für jedes Event erstellen
	// 5. Den Anwendungs-Header und Lade-Nachrichten anzeigen
	// 6. Jede Anzeigeoption verarbeiten (chronological, details, summary, years)
	// 7. Die 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