Strefy czasowe
Pracuj z lokalizacjami
Strefy czasowe to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Czas zawiera lokalizację
Każda wartość time.Time ma przypisaną lokalizację (strefę czasową). Ten sam moment może być wyświetlany różnie w zależności od strefy.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.Location())
}UTC i Local
Dwie wbudowane lokalizacje są zawsze dostępne:
time.UTCoznacza uniwersalny czas koordynowany.time.Localoznacza lokalną strefę komputera.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.UTC().Hour())
}Wczytywanie nazwanej strefy
time.LoadLocation(name) wyszukuje strefę IANA, taką jak "Europe/Istanbul" lub "America/New_York".
package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("UTC")
fmt.Println(loc, err)
}Konwertowanie stref za pomocą In
t.In(loc) zwraca ten sam moment wyświetlony w innej strefie. Rzeczywisty moment się nie zmienia — zmienia się tylko jego prezentacja.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(time.UTC).Hour())
}Ten sam moment, różne zegary
Południe w UTC to jeden konkretny moment, ale osoba znajdująca się w innej strefie zobaczy inną godzinę na zegarze. Różnica Sub między tymi wartościami wynosi zero.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
u := t.UTC()
fmt.Println(t.Sub(u))
}Tworzenie czasu w strefie
Aby utworzyć czas bezpośrednio w danej strefie, należy przekazać lokalizację jako ostatni argument funkcji time.Date.
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("UTC")
t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
fmt.Println(t.Hour())
}Odczytywanie przesunięcia strefy
t.Zone() zwraca skrót strefy oraz jej przesunięcie względem UTC wyrażone w sekundach.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
name, offset := t.Zone()
fmt.Println(name, offset)
}Strefy stałe
Gdy nie są potrzebne pełne reguły IANA, time.FixedZone(name, offsetSeconds) tworzy prostą strefę ze stałym przesunięciem.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
name, off := t.Zone()
fmt.Println(name, off)
}Formatowanie w różnych strefach
Przed formatowaniem należy przeprowadzić konwersję za pomocą In, aby wyświetlić znacznik czasu w strefie czytelnika.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Przechowuj w UTC, wyświetlaj lokalnie
Szeroko stosowana zasada brzmi: przechowuj dane i wykonuj obliczenia w UTC, a na strefę lokalną konwertuj je dopiero podczas wyświetlania czasu użytkownikom. Pozwala to uniknąć niejednoznaczności.
package main
import (
"fmt"
"time"
)
func main() {
stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT+2", 2*3600)
fmt.Println("shown:", stored.In(loc).Hour())
}Obsługa błędów wczytywania
LoadLocation może zakończyć się niepowodzeniem, jeśli brakuje bazy danych stref lub nazwa jest nieznana. Należy zawsze sprawdzać błąd.
package main
import (
"fmt"
"time"
)
func main() {
_, err := time.LoadLocation("Mars/Olympus")
if err != nil {
fmt.Println("unknown zone")
}
}Szybkie sprawdzenie
Co zmienia t.In(loc)?
Podsumowanie: strefy czasowe
Poznano pracę z lokalizacjami:
- Każdy czas ma lokalizację, a
UTCiLocalsą wbudowane. - Named zones można wczytywać za pomocą
LoadLocation, a strefy z przesunięciem tworzyć za pomocąFixedZone. - Do konwersji należy używać
In; dane należy przechowywać w UTC i wyświetlać lokalnie.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT-5", -5*3600)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Ucz się Go dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „Strefy czasowe” jest bezpłatna?
Tak — pełny tekst „Strefy czasowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Strefy czasowe”?
Pracuj z lokalizacjami Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Strefy czasowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.