Menu
Coddy logo textTech

Tworzenie określonej godziny

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 59 z 68.

Chociaż time.Now() zwraca bieżący moment, często trzeba pracować z określonymi datami i godzinami. Go udostępnia funkcję time.Date, która tworzy obiekt time.Time reprezentujący dowolną wskazaną przez Ciebie datę i godzinę.

Funkcja time.Date przyjmuje osiem parametrów w dokładnie tej kolejności: rok, miesiąc, dzień, godzinę, minutę, sekundę, nanosekundę i lokalizację. Oto podstawowa składnia:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Zwróć uwagę, że Go używa stałych takich jak time.March dla miesięcy, dzięki czemu Twój kod jest bardziej czytelny niż w przypadku używania liczb. Jeśli wolisz, możesz też używać liczb całkowitych (1-12). Parametr lokalizacji zazwyczaj przyjmuje wartość time.UTC dla czasu UTC lub time.Local dla lokalnej strefy czasowej Twojego systemu.

To podejście daje ci pełną kontrolę nad tworzeniem dowolnego konkretnego momentu w czasie, niezależnie od tego, czy jest to urodziny, termin czy data historyczna. Otrzymany obiekt time.Time działa dokładnie tak samo jak obiekt z time.Now() i można go używać do tych samych operacji na czasie.

challenge icon

Wyzwanie

Łatwy

Utwórz aplikację przedstawiającą oś czasu wydarzeń historycznych, która używa time.Date do reprezentowania konkretnych dat i godzin z historii. To wyzwanie sprawdzi Twoją umiejętność tworzenia obiektów time.Time dla precyzyjnie określonych momentów historycznych i wyświetlania ich w uporządkowanym formacie.

Otrzymasz dwa wejścia:

  • Ciąg znaków zawierający wydarzenia historyczne w formacie "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (np. "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • Ciąg znaków zawierający opcje wyświetlania oddzielone przecinkami w formacie "option1,option2,option3" (np. "chronological,details,summary")

Twoje zadanie:

  1. Przeanalizuj pierwsze wejście, dzieląc je po przecinkach, aby uzyskać poszczególne wpisy wydarzeń
  2. Dla każdego wpisu wydarzenia podziel go po dwukropkach, aby wyodrębnić nazwę wydarzenia, rok, miesiąc, dzień, godzinę i minutę
  3. Przekonwertuj ciągi znaków zawierające liczby na liczby całkowite i utwórz obiekt time.Time za pomocą time.Date dla każdego wydarzenia (użyj time.UTC jako parametru lokalizacji oraz 0 dla sekund i nanosekund)
  4. Wyświetl nagłówek aplikacji: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Wyświetl potwierdzenie wczytywania wydarzeń: "Loading historical events..."
  6. Dla każdego wydarzenia wyświetl: "Loaded: [event_name] - [complete_time_object]"
  7. Przeanalizuj drugie wejście, dzieląc je po przecinkach, aby uzyskać opcje wyświetlania
  8. Przetwórz każdą opcję wyświetlania:
    • Dla "chronological": Wyświetl "=== CHRONOLOGICAL ORDER ===", a następnie wydarzenia posortowane według daty (od najwcześniejszego), w formacie "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Dla "details": Wyświetl "=== DETAILED INFORMATION ===", a następnie każde wydarzenie w następującym formacie:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • Dla "summary": Wyświetl "=== TIMELINE SUMMARY ===", a następnie:
      • "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"
    • Dla "years": Wyświetl "=== EVENTS BY DECADE ===", a następnie wydarzenia pogrupowane według dekad, w formacie "[decade]s: [comma_separated_event_names]"
  9. Wyświetl komunikat o zakończeniu: "Historical timeline processing completed"

Użyj pakietu time, aby tworzyć konkretne daty za pomocą time.Date, pakietu strings, aby dzielić wejściowe ciągi znaków, pakietu strconv, aby konwertować ciągi znaków zawierające liczby na liczby całkowite, oraz pakietu fmt do formatowania danych wyjściowych. Pamiętaj, że time.Date przyjmuje parametry w dokładnie tej kolejności: rok, miesiąc, dzień, godzina, minuta, sekunda, nanosekunda, lokalizacja. Aby sortować chronologicznie, możesz porównywać obiekty time.Time za pomocą metody Before(). To wyzwanie pokazuje, jak tworzyć konkretne momenty w czasie i pracować z danymi historycznymi, korzystając z funkcji obsługi czasu w Go.

Spróbuj swoich sił

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Odczytaj dane wejściowe za pomocą bufio.Scanner, aby poprawnie obsłużyć spacje
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Przeanalizuj zdarzenia z danych wejściowych
	eventEntries := strings.Split(eventsInput, ",")
	
	// Przeanalizuj opcje wyświetlania z danych wejściowych
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Napisz swój kod poniżej
	// 1. Przeanalizuj każdy wpis zdarzenia, aby wyodrębnić nazwę, rok, miesiąc, dzień, godzinę i minutę
	// 2. Pamiętaj, aby przed odwołaniem się do elementów wycinka parts sprawdzić, czy jest ich wystarczająco dużo
	// 3. Przekonwertuj liczby zapisane jako ciągi znaków na liczby całkowite za pomocą strconv.Atoi()
	// 4. Utwórz obiekty time.Time za pomocą time.Date() dla każdego zdarzenia
	// 5. Wyświetl nagłówek aplikacji i komunikaty o ładowaniu
	// 6. Przetwórz każdą opcję wyświetlania (chronological, details, summary, years)
	// 7. Wyświetl komunikat o zakończeniu
	
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online