Как сравнить время?

В языке программирования Go сравнение времени может быть осуществлено с использованием следующих методов и операторов:

1. Методы time.Equal(time.Time) и time.Before(time.Time) позволяют сравнивать временные метки типа time.Time. Метод Equal возвращает true, если временные значения равны, в противном случае возвращает false. Метод Before возвращает true, если временная метка вызывающего объекта раньше переданной временной метки, в противном случае возвращает false.

Пример использования:

package main

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2021, time.January, 1, 0, 0, 0, 0, time.UTC)
    t2 := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC)

    fmt.Println(t1.Equal(t1))    // true
    fmt.Println(t1.Equal(t2))    // false
    fmt.Println(t1.Before(t2))   // true
    fmt.Println(t1.After(t2))    // false
}

2. Операторы сравнения <, >, <= и >= могут использоваться для сравнения значений типа time.Time. Они возвращают булево значение true, если условие выполняется, в противном случае возвращается false.

Пример использования:

package main

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2021, time.January, 1, 0, 0, 0, 0, time.UTC)
    t2 := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC)

    fmt.Println(t1 < t2)   // true
    fmt.Println(t1 > t2)   // false
    fmt.Println(t1 <= t2)  // true
    fmt.Println(t1 >= t2)  // false
}

Операторы сравнения также могут использоваться для сравнения со значениями типа time.Duration. Например, можно сравнивать разницу между двумя временными значениями с помощью оператора сравнения < или >.

3. Метод time.Since(time.Time) позволяет определить разницу между временем вызова метода и переданным временем. Результатом будет значение типа time.Duration, которое можно использовать для сравнения с другими значениями типа time.Duration.

Пример использования:

package main

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2021, time.January, 1, 0, 0, 0, 0, time.UTC)
    t2 := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC)

    duration := t2.Sub(t1)
    fmt.Println(duration)                              // 8760h0m0s
    fmt.Println(duration.Hours())                      // 8760
    fmt.Println(duration.Minutes())                    // 525600
    fmt.Println(duration.Seconds())                    // 31536000
    fmt.Println(duration.Milliseconds())               // 31536000000
    fmt.Println(duration.Microseconds())               // 31536000000000
    fmt.Println(duration.Nanoseconds())                // 31536000000000000
    fmt.Println(duration < time.Hour)                  // false
    fmt.Println(duration > (24 * time.Hour))           // true
}

Таким образом, в языке программирования Go есть несколько способов сравнения времени: с использованием методов Equal, Before и After, операторов сравнения <, >, <= и >=, а также метода Since. Выбор метода зависит от конкретной задачи и предпочтений программиста.