Тип time.Time
Тип time.Time представляет собой момент времени с наносекундной точностью и содержит информацию о временной зоне. Это основной тип для работы с датой и временем в Go. Он предоставляет множество методов для получения различных компонентов времени, сравнения, сложения и вычитания, а также форматирования.
Создание времени
Создать значение time.Time можно с помощью функции time.Now, которая возвращает текущее время, или функции time.Date, которая создает время из отдельных компонентов:
package 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)
}
Результат выполнения кода:
"2026-09-04 10:15:30.123456789 +0000 UTC"
"2026-09-04 15:30:00 +0000 UTC"
Методы получения компонентов времени
Тип time.Time предоставляет методы для получения отдельных компонентов времени, таких как год, месяц, день, час, минута, секунда и наносекунда:
package 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())
}
Результат выполнения кода:
2026
"September"
4
15
30
45
123456789
Сравнение времени
Для сравнения двух моментов времени используются методы Before, After и Equal. Они позволяют определить, наступило ли одно время раньше, позже или совпадает ли с другим:
package 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))
}
Результат выполнения кода:
true
false
true
Операции сложения и вычитания
Для сложения времени с интервалом используется метод Add, принимающий time.Duration. Для прибавления календарных дат используется метод AddDate, а для вычисления разницы между временами - метод Sub:
package 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)
}
Результат выполнения кода:
"2026-09-04 14:00:00 +0000 UTC"
"2026-12-09 12:00:00 +0000 UTC"
"2h0m0s"
Форматирование времени
Для преобразования времени в строку используется метод Format, который принимает шаблон на основе эталонного времени. Также есть метод String для стандартного строкового представления:
package 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"))
}
Результат выполнения кода:
"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 позволяет преобразовать время в указанную временную зону:
package 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))
}
Результат выполнения кода:
"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). Это полезно для проверки, инициализировано ли время явно:
package main
import (
"fmt"
"time"
)
func main() {
var t1 time.Time
t2 := time.Now()
fmt.Println(t1.IsZero())
fmt.Println(t2.IsZero())
}
Результат выполнения кода:
true
false
Смотрите также
-
функцию
time.Now,
которая возвращает текущее время -
функцию
time.Date,
которая создает время из компонентов -
метод
time.Time.Format,
который форматирует время в строку -
тип
time.Duration,
который представляет интервал времени