Go за Прикладом: Час

Go має об’ємну підтримку часових значень та значень тривалості. Давайте розглянемо наступні приклади.

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

Розпочнемо з отримання поточного часу.

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

Ми можемо створювати структуру часу, задаючи значення для року, місяця, дня і так далі. Час завжди асоційований з Розташуванням, інакше кажучи, з часовою зоною.

    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())

Окрему зручність ми отримуємо від виділеного методу що повертає - день тижня.

    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
2018-03-26 11:17:26.489645943 +0300 EEST m=+0.000299106
2009-11-17 20:34:58.651387237 +0000 UTC
2009
November
17
20
34
58
651387237
UTC
Tuesday
true
false
false
73211h42m27.838258706s
73211.70773284964
4.392702463970979e+06
2.635621478382587e+08
263562147838258706
2018-03-26 08:17:26.489645943 +0000 UTC
2001-07-12 08:52:30.813128531 +0000 UTC

Далі - ми розглянемо споріднену тему - час відносний до епох Unix.

Наступний приклад: Epoch.