Menu
Coddy logo textTech

Formatowanie czasu

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

Gdy masz już obiekt time.Time, często trzeba przekształcić go w czytelny ciąg znaków. Go stosuje unikalne podejście do formatowania czasu, które różni się od stosowanego w innych językach programowania.

Zamiast używać kodów formatu, takich jak %Y-%m-%d, Go używa daty odniesienia jako szablonu. Tą datą odniesienia jest Mon Jan 2 15:04:05 MST 2006, która oznacza dokładny moment: 2 stycznia 2006 roku o 15:04:05 czasu górskiego standardowego.

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Wynik: 2023-10-26

Najważniejsze jest to, że układasz składniki daty referencyjnej we wzorcu, którego chcesz użyć. W przypadku formatu YYYY-MM-DD używasz "2006-01-02", ponieważ tak wygląda data referencyjna w tym wzorcu. W przypadku innego formatu, takiego jak Jan 2, 2006, użyjesz "Jan 2, 2006".

To podejście oparte na układzie sprawia, że formatowanie czasu w Go jest zarówno łatwe do zapamiętania, jak i elastyczne. Gdy zapamiętasz datę referencyjną, możesz utworzyć dowolny format, po prostu układając jej elementy w wybrany wzór.

challenge icon

Wyzwanie

Łatwy

Utwórz system wyświetlania daty i czasu w wielu formatach, który formatuje obiekty time.Time przy użyciu unikalnego systemu układów opartego na dacie referencyjnej w Go. To wyzwanie sprawdzi Twoją umiejętność korzystania z metody Format z różnymi wzorcami układu, aby tworzyć różne reprezentacje daty i czasu.

Otrzymasz dwa dane wejściowe:

  • Ciąg znaków zawierający informacje o dacie w formacie "year:month:day:hour:minute" (np. "2023:12:25:14:30")
  • Ciąg znaków zawierający żądania formatów oddzielone przecinkami, w formacie "format1,format2,format3" (np. "iso,american,european,time12,time24")

Twoje zadanie:

  1. Przeanalizuj pierwsze dane wejściowe, dzieląc je według dwukropków, aby wyodrębnić wartości roku, miesiąca, dnia, godziny i minuty
  2. Przekonwertuj te wartości tekstowe na liczby całkowite za pomocą pakietu strconv
  3. Utwórz obiekt time.Time za pomocą time.Date i sparsowanych wartości (użyj time.UTC jako lokalizacji, a dla sekund i nanosekund podaj 0)
  4. Wyświetl nagłówek aplikacji: "=== DATE/TIME FORMATTER ==="
  5. Wyświetl czas źródłowy: "Source time: [complete_time_object]"
  6. Przeanalizuj drugie dane wejściowe, dzieląc je według przecinków, aby uzyskać żądania formatów
  7. Wyświetl nagłówek formatowania: "Formatted outputs:"
  8. Dla każdego żądania formatu użyj odpowiedniego ciągu układu wraz z metodą Format:
    • Dla "iso": Użyj układu "2006-01-02" i wyświetl "ISO format: [formatted_result]"
    • Dla "american": Użyj układu "01/02/2006" i wyświetl "American format: [formatted_result]"
    • Dla "european": Użyj układu "02/01/2006" i wyświetl "European format: [formatted_result]"
    • Dla "long": Użyj układu "January 2, 2006" i wyświetl "Long format: [formatted_result]"
    • Dla "time12": Użyj układu "3:04 PM" i wyświetl "12-hour time: [formatted_result]"
    • Dla "time24": Użyj układu "15:04" i wyświetl "24-hour time: [formatted_result]"
    • Dla "full": Użyj układu "Monday, January 2, 2006 at 3:04 PM" i wyświetl "Full format: [formatted_result]"
    • Dla "compact": Użyj układu "20060102" i wyświetl "Compact format: [formatted_result]"
  9. Oblicz i wyświetl statystyki:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Wyświetl informacje referencyjne:
    • "=== REFERENCE DATE INFO ==="
    • "Go uses reference date: Mon Jan 2 15:04:05 MST 2006"
    • "This represents: January 2nd, 2006 at 3:04:05 PM"
    • "Layout patterns arrange these components as needed"
  11. Wyświetl komunikat o zakończeniu: "Date formatting completed using Go's layout system"

Do operacji na czasie użyj pakietu time, do dzielenia ciągów wejściowych pakietu strings, do konwertowania ciągów na liczby całkowite pakietu strconv, a do formatowania danych wyjściowych pakietu fmt. Pamiętaj, że formatowanie czasu w Go wykorzystuje datę referencyjną Mon Jan 2 15:04:05 MST 2006 jako szablon, a Ty układasz te elementy we wzorcu zgodnie z potrzebą. To wyzwanie pokazuje działanie unikalnego systemu formatowania opartego na układach w Go, prosząc Cię o zastosowanie wielu różnych wzorców formatowania do tego samego obiektu czasu.

Spróbuj swoich sił

package main

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

func main() {
	// Odczytaj dane wejściowe
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Podziel datę na składniki, używając dwukropków jako separatorów
	dateComponents := strings.Split(dateInput, ":")
	
	// Przekonwertuj składniki tekstowe na liczby całkowite
	year, _ := strconv.Atoi(dateComponents[0])
	month, _ := strconv.Atoi(dateComponents[1])
	day, _ := strconv.Atoi(dateComponents[2])
	hour, _ := strconv.Atoi(dateComponents[3])
	minute, _ := strconv.Atoi(dateComponents[4])
	
	// Utwórz obiekt time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Przeanalizuj żądania formatowania
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Napisz swój kod poniżej
	// Wyświetl nagłówek aplikacji
	// Wyświetl czas źródłowy
	// Przetwórz każde żądanie formatowania i wyświetl sformatowane wyniki
	// Oblicz i wyświetl statystyki
	// Wyświetl informacje referencyjne
	// 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