0Pricing
Go Academy · Урок

Часовые пояса

Работайте с географическими местоположениями

«Часовые пояса» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

У времени есть часовой пояс

У каждого значения time.Time есть связанный часовой пояс. Один и тот же момент времени может отображаться по-разному в зависимости от часового пояса.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.Location())
}

UTC и местное время

Всегда доступны два встроенных часовых пояса:

  • time.UTC для всемирного координированного времени.
  • time.Local для местного часового пояса компьютера.
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.UTC().Hour())
}

Загрузка именованного часового пояса

time.LoadLocation(name) находит часовой пояс IANA, например "Europe/Istanbul" или "America/New_York".

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("UTC")
    fmt.Println(loc, err)
}

Преобразование часовых поясов с помощью In

t.In(loc) возвращает тот же момент времени, отображённый в другом часовом поясе. Сам момент не изменяется — меняется только его представление.

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())
}

Один момент, разные часы

Полдень по UTC — это один момент времени, но наблюдатель в другом часовом поясе видит другое значение на часах. Разница Sub между ними равна нулю.

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))
}

Создание времени в часовом поясе

Передайте часовой пояс последним аргументом в 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())
}

Чтение смещения часового пояса

t.Zone() возвращает аббревиатуру часового пояса и его смещение относительно UTC в секундах.

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)
}

Фиксированные часовые пояса

Если вам не нужны полные правила IANA, time.FixedZone(name, offsetSeconds) создаёт простой часовой пояс с постоянным смещением.

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)
}

Форматирование в разных часовых поясах

Перед форматированием выполните преобразование с помощью In, чтобы показать метку времени в часовом поясе читателя.

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"))
}

Храните в UTC, отображайте по местному времени

Широко используемое правило: храните данные и выполняйте вычисления в UTC, а в местный часовой пояс преобразуйте их только при отображении времени пользователям. Это устраняет неоднозначность.

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())
}

Обработка ошибок загрузки

LoadLocation может завершиться ошибкой, если база часовых поясов отсутствует или имя неизвестно. Всегда проверяйте ошибку.

package main

import (
    "fmt"
    "time"
)

func main() {
    _, err := time.LoadLocation("Mars/Olympus")
    if err != nil {
        fmt.Println("unknown zone")
    }
}

Быстрая проверка

Что изменяет t.In(loc)?

Повторение: часовые пояса

Вы научились работать с часовыми поясами:

  • У каждого значения времени есть часовой пояс; UTC и Local встроены в пакет.
  • Загружайте именованные часовые пояса с помощью LoadLocation или создавайте смещения с помощью FixedZone.
  • Преобразуйте часовые пояса с помощью In, храните время в UTC и отображайте его по местному времени.
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"))
}

Часто задаваемые вопросы

Урок «Часовые пояса» бесплатный?

Да — полный текст урока «Часовые пояса» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Часовые пояса»?

Работайте с географическими местоположениями Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Часовые пояса»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Время и длительность
  2. Форматирование и разбор
  3. Таймеры и тикеры
  4. Часовые пояса
← Назад к Go Academy