Тип time.Location
Тип time.Location представляет собой структуру,
которая хранит информацию о часовом поясе, включая его
название, смещение относительно UTC и правила перехода
на летнее время. Этот тип используется во многих функциях
пакета time для корректного отображения времени
в конкретном регионе.
Создание Location
Существует несколько способов получить объект
time.Location. Рассмотрим основные из них.
package main
import (
"fmt"
"time"
)
func main() {
// Получение локального часового пояса системы
loc := time.Local
fmt.Println(loc)
// Получение UTC
utc := time.UTC
fmt.Println(utc)
}
Результат выполнения кода:
"Local"
"UTC"
Загрузка Location по имени
Для загрузки часового пояса по его строковому
идентификатору используется функция
time.LoadLocation:
package main
import (
"fmt"
"time"
)
func main() {
// Загрузка часового пояса по имени
loc, err := time.LoadLocation("America/New_York")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(loc)
}
Результат выполнения кода:
"America/New_York"
Создание фиксированного Location
Для создания часового пояса с фиксированным смещением
от UTC используется функция time.FixedZone:
package main
import (
"fmt"
"time"
)
func main() {
// Создание часового пояса со смещением +3 часа
loc := time.FixedZone("MSK", 3*60*60)
fmt.Println(loc)
}
Результат выполнения кода:
"MSK"
Получение информации из Location
У типа time.Location есть метод
String, который возвращает название
часового пояса. Также с помощью метода
time.Time.Zone можно получить
информацию о зоне для конкретного момента времени:
package 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)
}
Результат выполнения кода:
"Zone: BST"
"Offset in seconds: 3600"
"Offset in hours: 1"
Преобразование времени между зонами
Объект time.Location активно используется
для конвертации времени из одного часового пояса
в другой с помощью метода
time.Time.In:
package 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)
}
Результат выполнения кода:
"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:
package 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)
}
Результат выполнения кода:
"true"
"false"
Смотрите также
-
функцию
time.LoadLocation,
которая загружает часовой пояс по его имени -
функцию
time.FixedZone,
которая создает часовой пояс с фиксированным смещением -
метод
time.Time.In,
который преобразует время в указанный часовой пояс -
метод
time.Time.Zone,
который возвращает информацию о зоне для конкретного времени