Часовые пояса
Работайте с географическими местоположениями
«Часовые пояса» — бесплатный урок 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 — локальная установка не требуется.