Функция time.ParseInLocation
Функция time.ParseInLocation преобразует строку,
представляющую дату и время, в значение time.Time.
В отличие от time.Parse, она использует переданный
часовой пояс для интерпретации времени, если в строке не указан
пояс явно. Первым параметром функция принимает шаблон разбора
(layout), вторым — строку для разбора (value), третьим —
часовой пояс (location).
Синтаксис
time.ParseInLocation(layout, value string, loc *time.Location) (time.Time, error)
Пример
Разберем строку "2026-09-04 15:04:05" с использованием
часового пояса UTC:
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05"
str := "2026-09-04 15:04:05"
loc := time.UTC
res, err := time.ParseInLocation(layout, str, loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"2026-09-04 15:04:05 +0000 UTC"
Пример
Разберем ту же строку, но с часовым поясом Europe/Moscow.
Обратите внимание, что время интерпретируется как московское:
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05"
str := "2026-09-04 15:04:05"
loc, err := time.LoadLocation("Europe/Moscow")
if err != nil {
fmt.Println(err)
return
}
res, err := time.ParseInLocation(layout, str, loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"2026-09-04 15:04:05 +0300 MSK"
Пример
Если строка содержит явный часовой пояс, ParseInLocation
игнорирует переданный пояс и использует тот, что указан в строке:
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05 -0700"
str := "2026-09-04 15:04:05 -0400"
loc := time.UTC
res, err := time.ParseInLocation(layout, str, loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"2026-09-04 15:04:05 -0400 -0400"
Пример
При разборе строки без часового пояса, ParseInLocation
использует переданный пояс для создания time.Time:
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05"
str := "2026-09-04 15:04:05"
loc := time.FixedZone("CST", 8*3600)
res, err := time.ParseInLocation(layout, str, loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"2026-09-04 15:04:05 +0800 CST"
Смотрите также
-
функцию
time.Parse,
которая разбирает строку времени без учета переданного пояса -
функцию
time.Time.In,
которая преобразует время в указанный часовой пояс -
функцию
time.Time.Location,
которая возвращает часовой пояс времени -
функцию
time.LoadLocation,
которая загружает часовой пояс по имени из базы данных