Время и длительность
Представляйте моменты и интервалы
«Время и длительность» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Время и длительность
- Форматирование и разбор
- Таймеры и тикеры
- Часовые пояса