Тип time.Location

Тип time.Location представляет собой структуру, которая хранит информацию о часовом поясе, включая его название, смещение относительно UTC и правила перехода на летнее время. Этот тип используется во многих функциях пакета time для корректного отображения времени в конкретном регионе.

Создание Location

Существует несколько способов получить объект time.Location. Рассмотрим основные из них.

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  // Получение локального часового пояса системы
  loc := time.Local
  fmt.Println(loc)

  // Получение UTC
  utc := time.UTC
  fmt.Println(utc)
}

Результат выполнения кода:

go"Local"
"UTC"

Загрузка Location по имени

Для загрузки часового пояса по его строковому идентификатору используется функция time.LoadLocation:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  // Загрузка часового пояса по имени
  loc, err := time.LoadLocation("America/New_York")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  
  fmt.Println(loc)
}

Результат выполнения кода:

go"America/New_York"

Создание фиксированного Location

Для создания часового пояса с фиксированным смещением от UTC используется функция time.FixedZone:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  // Создание часового пояса со смещением +3 часа
  loc := time.FixedZone("MSK", 3*60*60)
  fmt.Println(loc)
}

Результат выполнения кода:

go"MSK"

Получение информации из Location

У типа time.Location есть метод String, который возвращает название часового пояса. Также с помощью метода time.Time.Zone можно получить информацию о зоне для конкретного момента времени:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  // Создание времени в конкретном часовом поясе
  loc, _ := time.LoadLocation("Europe/London")
  t := time.Date(2026, 9, 4, 12, 0, 0, 0, loc)
  
  // Получение названия зоны и смещения
  name, offset := t.Zone()
  
  fmt.Println("Zone:", name)
  fmt.Println("Offset in seconds:", offset)
  fmt.Println("Offset in hours:", offset/3600)
}

Результат выполнения кода:

go"Zone: BST"
"Offset in seconds: 3600"
"Offset in hours: 1"

Преобразование времени между зонами

Объект time.Location активно используется для конвертации времени из одного часового пояса в другой с помощью метода time.Time.In:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  // Создание времени в UTC
  t := time.Date(2026, 9, 4, 12, 0, 0, 0, time.UTC)
  fmt.Println("UTC:", t)
  
  // Загрузка часового пояса
  loc, _ := time.LoadLocation("Asia/Tokyo")
  
  // Преобразование в токийское время
  tokyo := t.In(loc)
  fmt.Println("Tokyo:", tokyo)
}

Результат выполнения кода:

go"UTC: 2026-09-04 12:00:00 +0000 UTC"
"Tokyo: 2026-09-04 21:00:00 +0900 JST"

Проверка на UTC

Метод time.Time.Location возвращает часовой пояс, связанный с моментом времени. Сравнивая полученный объект с time.UTC, можно проверить, находится ли время в UTC:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t1 := time.Date(2026, 9, 4, 12, 0, 0, 0, time.UTC)
  t2 := time.Date(2026, 9, 4, 12, 0, 0, 0, time.Local)
  
  // Проверка, является ли время UTC
  fmt.Println(t1.Location() == time.UTC)
  fmt.Println(t2.Location() == time.UTC)
}

Результат выполнения кода:

go"true"
"false"

Смотрите также

  • функцию time.LoadLocation,
    которая загружает часовой пояс по его имени
  • функцию time.FixedZone,
    которая создает часовой пояс с фиксированным смещением
  • метод time.Time.In,
    который преобразует время в указанный часовой пояс
  • метод time.Time.Zone,
    который возвращает информацию о зоне для конкретного времени