Pobieranie bieżącego czasu
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 58 z 68.
Podczas pracy z datami i godzinami w programach Go będziesz używać wbudowanego pakietu Go time. Ten pakiet zapewnia wszystkie funkcje potrzebne do wykonywania operacji związanych z czasem.
Najczęstszym punktem wyjścia jest pobranie bieżącego czasu. Go ułatwia to za pomocą funkcji time.Now():
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}Funkcja time.Now() zwraca obiekt time.Time, który reprezentuje bieżący moment. Gdy wyświetlisz ten obiekt, pokaże on datę i godzinę w czytelnym formacie, wraz z informacją o strefie czasowej.
Ten obiekt time.Time zawiera wszystkie informacje o danym momencie — rok, miesiąc, dzień, godzinę, minutę, sekundę, a nawet nanosekundy. Będzie to podstawa wszystkich pozostałych operacji związanych z czasem w Go.
Wyzwanie
ŁatwyUtwórz aplikację do śledzenia czasu, która rejestruje bieżący czas i wyświetla go w wielu formatach. To wyzwanie sprawdzi Twoją umiejętność korzystania z funkcji time.Now() oraz pracy z obiektami time.Time w celu wyodrębniania różnych składników bieżącej chwili.
Otrzymasz jedno wejście:
- Łańcuch znaków zawierający żądania formatów wyświetlania, oddzielone przecinkami, w formacie
"format1,format2,format3"(np."full,date,time,year,month,day")
Twoim zadaniem jest:
- Użyć
time.Now(), aby zarejestrować bieżący czas i zapisać go w zmiennej - Wyświetlić nagłówek aplikacji:
"=== TIME TRACKER APPLICATION ===" - Wyświetlić potwierdzenie zarejestrowania znacznika czasu:
"Current time captured successfully" - Przeanalizować dane wejściowe, dzieląc je po przecinkach, aby uzyskać poszczególne żądania formatów
- Wyświetlić nagłówek formatów:
"Displaying time in requested formats:" - Dla każdego żądania formatu wyświetlić informacje o czasie zgodnie z określonym formatem:
- Dla
"full": wyświetlić"Full timestamp: [complete_time_object]" - Dla
"date": wyświetlić"Date only: [year]-[month]-[day]"(użyć składników zwracanych przez metodę Date()) - Dla
"time": wyświetlić"Time only: [hour]:[minute]:[second]"(użyć metod Hour(), Minute(), Second()) - Dla
"year": wyświetlić"Year: [year_value]"(użyć metody Year()) - Dla
"month": wyświetlić"Month: [month_name]"(użyć metody Month()) - Dla
"day": wyświetlić"Day: [day_value]"(użyć metody Day()) - Dla
"weekday": wyświetlić"Weekday: [weekday_name]"(użyć metody Weekday()) - Dla
"unix": wyświetlić"Unix timestamp: [unix_seconds]"(użyć metody Unix())
- Dla
- Policzyć i wyświetlić statystyki:
"=== TIME INFORMATION SUMMARY ===""Total formats displayed: [number_of_formats]""Timestamp components extracted: [number_of_unique_components]"
- Wyświetlić dodatkowe szczegóły dotyczące czasu:
"Additional time details:""- Nanoseconds: [nanosecond_value]"(użyć metody Nanosecond())"- Location: [timezone_location]"(użyć metody Location())"- Is zero time: [true_or_false]"(użyć metody IsZero())
- Wyświetlić komunikat o zakończeniu:
"Time tracking completed - all requested formats processed"
Użyj pakietu time do pracy z obiektami czasu, pakietu strings do podzielenia wejściowego łańcucha znaków oraz pakietu fmt do formatowania danych wyjściowych. Pamiętaj, że time.Now() zwraca obiekt time.Time, który zawiera wszystkie informacje o bieżącej chwili, a poszczególne składniki możesz wyodrębnić za pomocą różnych metod dostępnych dla tego obiektu. To wyzwanie pokazuje, jak zarejestrować bieżący czas i wyodrębnić różne informacje z jednego obiektu time.Time.
Spróbuj swoich sił
package main
import (
"fmt"
"strings"
"time"
)
func main() {
// Odczytaj dane wejściowe
var formatRequests string
fmt.Scanln(&formatRequests)
// Użyj stałej daty i godziny, aby uzyskać spójne wyniki (czas referencyjny Go)
// Zamiast time.Now() użyj time.Date, aby uzyskać przewidywalne wyniki
currentTime := time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
// Podziel żądania formatowania
formats := strings.Split(formatRequests, ",")
// TODO: Napisz swój kod poniżej
// Wyświetl nagłówek aplikacji
// Wyświetl potwierdzenie pobrania znacznika czasu
// Wyświetl nagłówek formatów
// Przetwórz każde żądanie formatowania i odpowiednio wyświetl wynik
// Użyj mapy do śledzenia unikalnych składników na potrzeby zliczania
// Użyj odpowiedniego formatowania (np. %02d dla liczb dopełnianych zerami)
// Wyświetl statystyki podsumowujące
// Wyświetl dodatkowe szczegóły dotyczące czasu
// 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 zadania7Obsługa błędów — dogłębnie
Własne typy błędówOpakowywanie błędów za pomocą `%w`Rozpakowywanie za pomocą `errors.Is`Rozpakowywanie za pomocą `errors.As`Zrozumienie `panic`Używanie `recover`Podsumowanie — bezpieczne dzielenie10Praca z czasem
Pobieranie bieżącego czasuTworzenie określonej godzinyFormatowanie czasuParsowanie ciągów czasuCzas trwaniaOperacje arytmetyczne na czasieUśpienia i tickeryPodsumowanie — prosty timer2Struktury 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