Go Academy · Lekcja

Strefy czasowe

Pracuj z lokalizacjami

Lekcja 4 z 413 kroki

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.UTC oznacza uniwersalny czas koordynowany.
  • time.Local oznacza 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 UTC i Local są 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"))
}
Bezpłatny start

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.

Wszystkie lekcje w tym kursie

  1. Czas i czas trwania
  2. Formatowanie i analizowanie
  3. Timery i tickery
  4. Strefy czasowe
← Powrót do Go Academy