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-26Najważ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.
Wyzwanie
ŁatwyUtwó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:
- Przeanalizuj pierwsze dane wejściowe, dzieląc je według dwukropków, aby wyodrębnić wartości roku, miesiąca, dnia, godziny i minuty
- Przekonwertuj te wartości tekstowe na liczby całkowite za pomocą pakietu
strconv - Utwórz obiekt
time.Timeza pomocątime.Datei sparsowanych wartości (użyjtime.UTCjako lokalizacji, a dla sekund i nanosekund podaj 0) - Wyświetl nagłówek aplikacji:
"=== DATE/TIME FORMATTER ===" - Wyświetl czas źródłowy:
"Source time: [complete_time_object]" - Przeanalizuj drugie dane wejściowe, dzieląc je według przecinków, aby uzyskać żądania formatów
- Wyświetl nagłówek formatowania:
"Formatted outputs:" - 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]"
- Dla
- Oblicz i wyświetl statystyki:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 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"
- 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
}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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online