Menu
CoddyTech

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 bietet die Funktion time.Date, um ein time.Time-Objekt zu erstellen, das ein beliebiges Datum und eine beliebige Uhrzeit darstellt, die du angibst.

Die Funktion time.Date nimmt acht Parameter in genau dieser Reihenfolge entgegen: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde und Zeitzone. 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 das bevorzugst. Für den Standortparameter wird typischerweise time.UTC für die UTC-Zeit oder time.Local für die lokale Zeitzone deines Systems verwendet.

Dieser Ansatz gibt dir die vollständige Kontrolle darüber, jeden beliebigen Zeitpunkt zu erstellen, sei es ein Geburtstag, eine Frist oder ein historisches Datum. Das resultierende time.Time-Objekt funktioniert genau wie das von time.Now() und kann für dieselben Zeitoperationen verwendet werden.

challenge icon

Aufgabe

Einfach

Erstelle eine Anwendung für eine Zeitleiste historischer Ereignisse, die time.Date verwendet, um bestimmte historische Daten und Uhrzeiten darzustellen. Diese Herausforderung prüft deine Fähigkeit, time.Time-Objekte für präzise historische Zeitpunkte zu erstellen und sie in einem geordneten Format anzuzeigen.

Du erhältst zwei Eingaben:

  • Eine Zeichenfolge 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 Zeichenfolge mit durch Kommas getrennten Anzeigeoptionen im Format "option1,option2,option3" (z. B. "chronological,details,summary")

Deine Aufgabe ist es:

  1. Die erste Eingabe durch Aufteilen an Kommas zu verarbeiten, um einzelne Ereigniseinträge zu erhalten
  2. Jeden Ereigniseintrag an Doppelpunkten aufzuteilen, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
  3. Die numerischen Zeichenfolgen in Ganzzahlen umzuwandeln und für jedes Ereignis mit time.Date ein time.Time-Objekt zu erstellen (verwende time.UTC als Ortsparameter sowie 0 für Sekunden und Nanosekunden)
  4. Die Kopfzeile der Anwendung anzuzeigen: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Die Bestätigung für das Laden der Ereignisse anzuzeigen: "Loading historical events..."
  6. Für jedes Ereignis Folgendes anzuzeigen: "Loaded: [event_name] - [complete_time_object]"
  7. Die zweite Eingabe durch Aufteilen an Kommas zu verarbeiten, um die Anzeigeoptionen zu erhalten
  8. Jede Anzeigeoption zu verarbeiten:
    • Für "chronological": "=== CHRONOLOGICAL ORDER ===" anzeigen, gefolgt von den nach Datum sortierten Ereignissen (frühestes zuerst), im Format "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Für "details": "=== DETAILED INFORMATION ===" anzeigen, gefolgt von den folgenden Zeilen für jedes Ereignis (die letzten vier sind um zwei Leerzeichen eingerückt):
      Event: [event_name]
        Date: [year]-[month]-[day]
        Time: [hour]:[minute] UTC
        Weekday: [weekday_name]
        Unix timestamp: [unix_seconds]
    • Für "summary": "=== TIMELINE SUMMARY ===" anzeigen, 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": "=== EVENTS BY DECADE ===" anzeigen, gefolgt von nach Jahrzehnten gruppierten Ereignissen im Format "[decade]s: [comma_separated_event_names]"
  9. Die Abschlussmeldung anzeigen: "Historical timeline processing completed"

Formatierungsregeln: Die Zeile Loaded: gibt den Wert von time.Time unverändert mit %v aus, zum Beispiel Loaded: Moon Landing - 1969-07-20 20:17:00 +0000 UTC. Alle anderen Datums- und Zeitangaben werden von Hand erstellt: Monat, Tag und Stunde haben keine führende Null, und die Minute hat immer zwei Stellen (%02d); dasselbe Ereignis wird also als Moon Landing: 1969-7-20 at 20:17 UTC ausgegeben, und Minute 0 wird als 21:00 ausgegeben. [unix_seconds] ist Unix() und ist für Daten vor 1970 negativ. In der Jahrzehnteliste sind die Jahrzehnte vom frühesten zum spätesten sortiert, und die Namen innerhalb jedes Jahrzehnts werden in Eingabereihenfolge durch ein Komma ohne Leerzeichen verbunden.

Verwende das Paket time, um mit time.Date bestimmte Daten zu erstellen, das Paket strings, um Eingabezeichenfolgen aufzuteilen, das Paket strconv, um Zahlenzeichenfolgen in Ganzzahlen umzuwandeln, und das Paket fmt für die formatierte Ausgabe. Denk daran, dass time.Date die Parameter in genau dieser Reihenfolge erwartet: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Nanosekunde, Ort. Um chronologisch zu sortieren, kannst du time.Time-Objekte mit der Methode Before() vergleichen. Diese Herausforderung zeigt, wie man bestimmte Zeitpunkte erstellt und mit Go-Zeitfunktionen historische Daten verarbeitet.

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 unten
	// 1. Jeden Ereigniseintrag parsen, um Name, Jahr, Monat, Tag, Stunde und Minute zu extrahieren
	// 2. Vor dem Zugriff prüfen, ob das Slice parts genügend Elemente enthält
	// 3. Zahlen aus Zeichenketten mit strconv.Atoi() in Ganzzahlen umwandeln
	// 4. Für jedes Ereignis time.Time-Objekte mit time.Date() erstellen
	// 5. Anwendungsüberschrift und Lademeldungen anzeigen
	// 6. Jede Anzeigeoption verarbeiten (chronologisch, Details, Zusammenfassung, Jahre)
	// 7. 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