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

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

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 aufteilen, um die einzelnen Ereigniseinträge zu erhalten
  2. Für jeden Ereigniseintrag die Doppelpunkte aufzuteilen, um den Ereignisnamen, das Jahr, den Monat, den Tag, die Stunde und die Minute zu extrahieren
  3. Die numerischen Strings in Ganzzahlen umzuwandeln und für jedes Ereignis ein time.Time-Objekt mit time.Date zu erstellen (verwenden Sie time.UTC für den Standortparameter und 0 für Sekunden und Nanosekunden)
  4. Den Header 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 anzuzeigen: "Loaded: [event_name] - [complete_time_object]"
  7. Die zweite Eingabe zu parsen, indem Sie sie an den Kommas aufteilen, 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 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
	
}
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