0Pricing
Go Academy · Урок

Время и длительность

Представляйте моменты и интервалы

«Время и длительность» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Пакет time

Пакет time в Go представляет моменты времени и промежутки между ними.

  • time.Time — конкретный момент.
  • time.Duration — промежуток времени.
package main

import (
    "fmt"
    "time"
)

func main() {
    var d time.Duration = 2 * time.Second
    fmt.Println(d)
}

Получение текущего времени

time.Now() возвращает текущий момент как значение типа time.Time. (Его точное значение зависит от времени запуска программы.)

package main

import (
    "fmt"
    "time"
)

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

Создание конкретного момента времени

time.Date создаёт точный момент из его составляющих: года, месяца, дня, часа, минуты, секунды, наносекунды и местоположения.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
    fmt.Println(t)
}

Чтение составляющих времени

Тип time.Time предоставляет такие методы, как Year, Month, Day, Hour и Weekday.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, time.May, 30, 0, 0, 0, 0, time.UTC)
    fmt.Println(t.Month(), t.Day(), t.Weekday())
}

Константы промежутков времени

Создавайте промежутки времени, умножая константы единиц измерения: time.Hour, time.Minute, time.Second, time.Millisecond.

package main

import (
    "fmt"
    "time"
)

func main() {
    d := 1*time.Hour + 30*time.Minute
    fmt.Println(d)
}

Преобразование промежутков времени

Такие методы, как Seconds(), Minutes() и Hours(), возвращают продолжительность в виде float64 в соответствующих единицах.

package main

import (
    "fmt"
    "time"
)

func main() {
    d := 90 * time.Minute
    fmt.Println(d.Hours())
    fmt.Println(d.Seconds())
}

Добавление времени

t.Add(d) возвращает новое время, смещённое на заданный промежуток. Исходное значение не изменяется, поскольку time.Time является типом-значением.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
    later := t.Add(2 * time.Hour)
    fmt.Println(later.Hour())
}

Добавление календарных единиц

t.AddDate(years, months, days) смещает дату на заданные календарные величины, корректно учитывая длину месяцев и високосные годы.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, time.January, 31, 0, 0, 0, 0, time.UTC)
    next := t.AddDate(0, 1, 0)
    fmt.Println(next.Month(), next.Day())
}

Разница между моментами времени

t2.Sub(t1) возвращает Duration между двумя моментами времени. Отрицательный результат означает, что t2 наступает раньше.

package main

import (
    "fmt"
    "time"
)

func main() {
    a := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
    b := time.Date(2026, time.May, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(b.Sub(a))
}

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

Используйте Before, After и Equal, чтобы сравнивать моменты времени. Избегайте ==, поскольку этот оператор также сравнивает внутренний часовой пояс.

package main

import (
    "fmt"
    "time"
)

func main() {
    a := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
    b := time.Date(2026, 5, 30, 10, 0, 0, 0, time.UTC)
    fmt.Println(a.Before(b))
}

Метки времени Unix

t.Unix() возвращает количество секунд с 1 января 1970 года. time.Unix(sec, 0) преобразует это значение обратно в time.Time.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 0, 0, 0, 0, time.UTC)
    secs := t.Unix()
    fmt.Println(time.Unix(secs, 0).UTC().Year())
}

Быстрая проверка

Что возвращает t2.Sub(t1)?

Повторение: время и интервал

Вы изучили основную модель работы со временем:

  • time.Time — это момент времени, а time.Duration — промежуток времени.
  • Создавайте значения с помощью Now и Date, а изменяйте их с помощью Add и AddDate.
  • Измеряйте разницу с помощью Sub и сравнивайте значения с помощью Before/After.
package main

import (
    "fmt"
    "time"
)

func main() {
    start := time.Date(2026, 5, 30, 8, 0, 0, 0, time.UTC)
    end := start.Add(45 * time.Minute)
    fmt.Println(end.Sub(start).Minutes(), "minutes")
}

Часто задаваемые вопросы

Урок «Время и длительность» бесплатный?

Да — полный текст урока «Время и длительность» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Время и длительность»?

Представляйте моменты и интервалы Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Время и длительность»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Время и длительность
  2. Форматирование и разбор
  3. Таймеры и тикеры
  4. Часовые пояса
← Назад к Go Academy