Тип time.Time

Тип time.Time представляет собой момент времени с наносекундной точностью и содержит информацию о временной зоне. Это основной тип для работы с датой и временем в Go. Он предоставляет множество методов для получения различных компонентов времени, сравнения, сложения и вычитания, а также форматирования.

Создание времени

Создать значение time.Time можно с помощью функции time.Now, которая возвращает текущее время, или функции time.Date, которая создает время из отдельных компонентов:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  now := time.Now()
  fmt.Println(now)

  date := time.Date(2026, time.September, 4, 15, 30, 0, 0, time.UTC)
  fmt.Println(date)
}

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

go"2026-09-04 10:15:30.123456789 +0000 UTC"
"2026-09-04 15:30:00 +0000 UTC"

Методы получения компонентов времени

Тип time.Time предоставляет методы для получения отдельных компонентов времени, таких как год, месяц, день, час, минута, секунда и наносекунда:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t := time.Date(2026, time.September, 4, 15, 30, 45, 123456789, time.UTC)

  fmt.Println(t.Year())
  fmt.Println(t.Month())
  fmt.Println(t.Day())
  fmt.Println(t.Hour())
  fmt.Println(t.Minute())
  fmt.Println(t.Second())
  fmt.Println(t.Nanosecond())
}

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

go2026
"September"
4
15
30
45
123456789

Сравнение времени

Для сравнения двух моментов времени используются методы Before, After и Equal. Они позволяют определить, наступило ли одно время раньше, позже или совпадает ли с другим:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t1 := time.Date(2026, time.September, 4, 10, 0, 0, 0, time.UTC)
  t2 := time.Date(2026, time.September, 4, 15, 0, 0, 0, time.UTC)
  t3 := time.Date(2026, time.September, 4, 10, 0, 0, 0, time.UTC)

  fmt.Println(t1.Before(t2))
  fmt.Println(t1.After(t2))
  fmt.Println(t1.Equal(t3))
}

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

gotrue
false
true

Операции сложения и вычитания

Для сложения времени с интервалом используется метод Add, принимающий time.Duration. Для прибавления календарных дат используется метод AddDate, а для вычисления разницы между временами - метод Sub:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t := time.Date(2026, time.September, 4, 12, 0, 0, 0, time.UTC)

  // Добавление 2 часов
  t1 := t.Add(2 * time.Hour)
  fmt.Println(t1)

  // Добавление 5 дней и 3 месяцев
  t2 := t.AddDate(0, 3, 5)
  fmt.Println(t2)

  // Разница между временами
  diff := t1.Sub(t)
  fmt.Println(diff)
}

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

go"2026-09-04 14:00:00 +0000 UTC"
"2026-12-09 12:00:00 +0000 UTC"
"2h0m0s"

Форматирование времени

Для преобразования времени в строку используется метод Format, который принимает шаблон на основе эталонного времени. Также есть метод String для стандартного строкового представления:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t := time.Date(2026, time.September, 4, 15, 30, 0, 0, time.UTC)

  fmt.Println(t.String())
  fmt.Println(t.Format(time.RFC3339))
  fmt.Println(t.Format("2006-01-02 15:04:05"))
  fmt.Println(t.Format("02 Jan 2006"))
}

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

go"2026-09-04 15:30:00 +0000 UTC"
"2026-09-04T15:30:00Z"
"2026-09-04 15:30:00"
"04 Sep 2026"

Работа с временными зонами

Для работы с временными зонами используются методы UTC, Local и In. Метод In позволяет преобразовать время в указанную временную зону:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  t := time.Date(2026, time.September, 4, 15, 30, 0, 0, time.UTC)

  fmt.Println(t.UTC())
  fmt.Println(t.Local())

  loc, _ := time.LoadLocation("America/New_York")
  fmt.Println(t.In(loc))
}

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

go"2026-09-04 15:30:00 +0000 UTC"
"2026-09-04 20:30:00 +0500 +05"
"2026-09-04 11:30:00 -0400 EDT"

Проверка на нулевое время

Метод IsZero проверяет, является ли время нулевым (1 января 0001 года 00:00:00 UTC). Это полезно для проверки, инициализировано ли время явно:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  var t1 time.Time
  t2 := time.Now()

  fmt.Println(t1.IsZero())
  fmt.Println(t2.IsZero())
}

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

gotrue
false

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

  • функцию time.Now,
    которая возвращает текущее время
  • функцию time.Date,
    которая создает время из компонентов
  • метод time.Time.Format,
    который форматирует время в строку
  • тип time.Duration,
    который представляет интервал времени