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() 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.

challenge icon

Aufgabe

Einfach

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

  1. Analysiere die erste Eingabe, indem du sie an Kommas aufteilst, um einzelne Ereigniseinträge zu erhalten
  2. Teile jeden Ereigniseintrag an Doppelpunkten auf, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
  3. Wandle die numerischen Zeichenketten in Ganzzahlen um und erstelle mit time.Time für jedes Ereignis ein time.Date-Objekt (verwende time.UTC für den Ortsparameter sowie 0 für Sekunden und Nanosekunden)
  4. Zeige den Anwendungskopf an: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Zeige die Bestätigung für das Laden der Ereignisse an: "Loading historical events..."
  6. Zeige für jedes Ereignis Folgendes an: "Loaded: [event_name] - [complete_time_object]"
  7. Analysiere die zweite Eingabe, indem du sie an Kommas aufteilst, um die Anzeigeoptionen zu erhalten
  8. 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
  9. 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
	
}
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

Übe selbstständig: Online-Go-Compiler