Go на примерах: Время

Go предоставляет обширную поддержку работы со временем и продолжительностью; вот несколько примеров.

package main
import (
    "fmt"
    "time"
)
func main() {
    p := fmt.Println

Начнём с получения текущего времени.

    now := time.Now()
    p(now)

Можно создать структуру time, указав год, месяц, день и т.д. Время всегда связано с Location, т.е. часовым поясом.

    then := time.Date(
        2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
    p(then)

Можно извлечь различные компоненты значения времени, как и следовало ожидать.

    p(then.Year())
    p(then.Month())
    p(then.Day())
    p(then.Hour())
    p(then.Minute())
    p(then.Second())
    p(then.Nanosecond())
    p(then.Location())

Также доступен день недели Weekday (понедельник-воскресенье).

    p(then.Weekday())

Эти методы сравнивают два момента времени, проверяя, наступает ли первый до, после или одновременно со вторым, соответственно.

    p(then.Before(now))
    p(then.After(now))
    p(then.Equal(now))

Метод Sub возвращает Duration, представляющий интервал между двумя моментами времени.

    diff := now.Sub(then)
    p(diff)

Можно вычислить длительность в различных единицах.

    p(diff.Hours())
    p(diff.Minutes())
    p(diff.Seconds())
    p(diff.Nanoseconds())

С помощью Add можно продвинуть время на заданную продолжительность, или с - — переместить назад на заданную продолжительность.

    p(then.Add(diff))
    p(then.Add(-diff))
}
$ go run time.go
2012-10-31 15:50:13.793654 +0000 UTC
2009-11-17 20:34:58.651387237 +0000 UTC
2009
November
17
20
34
58
651387237
UTC
Tuesday
true
false
false
25891h15m15.142266763s
25891.25420618521
1.5534752523711128e+06
9.320851514226677e+07
93208515142266763
2012-10-31 15:50:13.793654 +0000 UTC
2006-12-05 01:19:43.509120474 +0000 UTC

Далее рассмотрим связанную концепцию времени относительно эпохи Unix.

Далее: .