Функция time.ParseInLocation

Функция time.ParseInLocation преобразует строку, представляющую дату и время, в значение time.Time. В отличие от time.Parse, она использует переданный часовой пояс для интерпретации времени, если в строке не указан пояс явно. Первым параметром функция принимает шаблон разбора (layout), вторым — строку для разбора (value), третьим — часовой пояс (location).

Синтаксис

gotime.ParseInLocation(layout, value string, loc *time.Location) (time.Time, error)

Пример

Разберем строку "2026-09-04 15:04:05" с использованием часового пояса UTC:

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

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

go"2026-09-04 15:04:05 +0000 UTC"

Пример

Разберем ту же строку, но с часовым поясом Europe/Moscow. Обратите внимание, что время интерпретируется как московское:

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

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

go"2026-09-04 15:04:05 +0300 MSK"

Пример

Если строка содержит явный часовой пояс, ParseInLocation игнорирует переданный пояс и использует тот, что указан в строке:

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

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

go"2026-09-04 15:04:05 -0400 -0400"

Пример

При разборе строки без часового пояса, ParseInLocation использует переданный пояс для создания time.Time:

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

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

go"2026-09-04 15:04:05 +0800 CST"

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

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