now := time.Now()
fmt.Printf("%T\n", now) time.Time То есть time.Time — это тип, который хранит дату, время и информацию о временной зоне
d := 5 * time.Second
fmt.Printf("%T %v\n", d, d) time.Time = точка во времени
time.Duration = длина промежутка
time.Location = где мы на это время смотрим
time.Now() package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
} 2026-06-09 14:32:10.123456789 +0300 EEST m=+0.000123456 2026-06-09 14:32:10.123456789 +0300 EEST nowUTC := time.Now().UTC()
fmt.Println(nowUTC) now := time.Now()
fmt.Println(now.Year())
fmt.Println(now.Month())
fmt.Println(now.Day())
fmt.Println(now.Hour())
fmt.Println(now.Minute())
fmt.Println(now.Second())
fmt.Println(now.Nanosecond()) time.Date(...) birthday := time.Date(2024, time.April, 11, 10, 9, 8, 0, time.UTC)
fmt.Println(birthday) 2024-04-11 10:09:08 +0000 UTC time.Date(year, month, day, hour, min, sec, nsec, loc) time.January
time.February
time.March t := time.Date(2024, time.April, 34, 10, 0, 0, 0, time.UTC)
fmt.Println(t) now := time.Now()
deadline := time.Date(now.Year(), now.Month(), now.Day(), 18, 0, 0, 0, now.Location())
Если дата приходит из внешнего мира строкой, обычно нужен Parse.
Если дата создаётся внутри программы осознанно по компонентам, обычно лучше Date.Mon Jan 2 15:04:05 MST 2006 now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05")) 2026-06-09 14:30:45 2006 = год
01 = месяц
02 = день
15 = часы в 24-часовом формате
04 = минуты
05 = секунды now.Format("YYYY-MM-DD") now.Format("2006-01-02 15:04:05") now.Format("2006-01-02") now.Format("15:04:05") now.Format("02.01.2006 15:04") fmt.Println(now.Format(time.RFC3339))
fmt.Println(now.Format(time.DateOnly))
fmt.Println(now.Format(time.TimeOnly))
fmt.Println(now.Format(time.DateTime))
fmt.Println(now.Format(time.UnixDate)) fmt.Println(time.Now().UTC().Format(time.RFC3339))
layout := "2006-01-02 15:04:05"
value := "2026-06-09 14:30:45"
t, err := time.Parse(layout, value)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
fmt.Println(t) 09.06.2026 14:30 "02.01.2006 15:04" layout := "02.01.2006"
value := "09.06.2026"
t, err := time.Parse(layout, value)
if err != nil {
panic(err)
}
fmt.Println(t) loc, err := time.LoadLocation("Europe/Moscow")
if err != nil {
panic(err)
}
layout := "02.01.2006 15:04"
value := "09.06.2026 14:30"
t, err := time.ParseInLocation(layout, value, loc)
if err != nil {
panic(err)
}
fmt.Println(t) 2026-06-09 18:00:00 func parseFlexibleTime(value string) (time.Time, error) {
layouts := []string{
time.RFC3339,
"2006-01-02 15:04:05",
"02.01.2006 15:04",
"2006-01-02",
}
for _, layout := range layouts {
if t, err := time.Parse(layout, value); err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("не удалось распарсить время: %s", value)
}
5 * time.Second
2 * time.Minute
24 * time.Hour
150 * time.Millisecond d := 2*time.Hour + 30*time.Minute
fmt.Println(d)
fmt.Println(d.Hours())
fmt.Println(d.Minutes())
fmt.Println(d.Seconds()) now := time.Now()
future := now.Add(2 * time.Hour)
past := now.Add(-30 * time.Minute)
fmt.Println(future)
fmt.Println(past) now := time.Now()
nextMonth := now.AddDate(0, 1, 0)
nextWeek := now.AddDate(0, 0, 7)
nextYear := now.AddDate(1, 0, 0) start := time.Date(2026, time.June, 1, 10, 0, 0, 0, time.UTC)
end := time.Date(2026, time.June, 1, 12, 30, 0, 0, time.UTC)
diff := end.Sub(start)
fmt.Println(diff) // 2h30m0s started := time.Now()
time.Sleep(2 * time.Second)
fmt.Println(time.Since(started)) deadline := time.Now().Add(10 * time.Minute)
fmt.Println(time.Until(deadline)) fmt.Println(t1.Before(t2))
fmt.Println(t1.After(t2))
fmt.Println(t1.Equal(t2))
now := time.Now()
fmt.Println(now.Unix()) fmt.Println(now.UnixMilli()) fmt.Println(now.UnixNano()) ts := time.Now().Unix()
t := time.Unix(ts, 0)
fmt.Println(t) tsMs := time.Now().UnixMilli()
t := time.UnixMilli(tsMs)
fmt.Println(t) type Event struct {
Name string `json:"name"`
At time.Time `json:"at"`
} fmt.Println("start")
time.Sleep(2 * time.Second)
fmt.Println("done") select {
case <-time.After(2 * time.Second):
fmt.Println("timeout")
} select {
case result := <-workCh:
fmt.Println(result)
case <-time.After(1 * time.Second):
fmt.Println("слишком долго")
} timer := time.NewTimer(3 * time.Second)
<-timer.C
fmt.Println("timer fired") if timer.Stop() {
fmt.Println("timer stopped")
} time.AfterFunc(2*time.Second, func() {
fmt.Println("run later")
}) ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("tick")
} ticker := time.NewTicker(time.Second)
defer ticker.Stop()
nowUTC := time.Now().UTC()
fmt.Println(nowUTC) fmt.Println(time.Now().Local()) loc, err := time.LoadLocation("Europe/Moscow")
if err != nil {
panic(err)
}
nowMoscow := time.Now().In(loc)
fmt.Println(nowMoscow) 2026-06-09 18:00:00
now := time.Now() nowUTC := time.Now().UTC() s := time.Now().Format("2006-01-02 15:04:05") t, err := time.Parse("2006-01-02 15:04:05", value) nextWeek := time.Now().AddDate(0, 0, 7) select {
case <-workCh:
case <-time.After(2 * time.Second):
} ticker := time.NewTicker(time.Second)
defer ticker.Stop()