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

В Go для сравнения времени используется структура time.Time. Она представляет собой момент во времени и содержит информацию о годе, месяце, дне, часе, минуте, секунде и наносекунде.

Сравнение времени в Go осуществляется с помощью операторов сравнения (<, >, <= и >=). Они позволяют сравнивать два значения типа time.Time и определить, какое из двух значений предшествует другому во временной шкале.

Пример:

package main

import (
	"fmt"
	"time"
)

func main() {
	currentTime := time.Now()
	otherTime := time.Date(2022, time.May, 1, 12, 0, 0, 0, time.UTC)

	if currentTime.Before(otherTime) {
		fmt.Println("Текущее время раньше указанного времени")
	} else if currentTime.After(otherTime) {
		fmt.Println("Текущее время позже указанного времени")
	} else {
		fmt.Println("Текущее время и указанное время равны")
	}

	if currentTime.Equal(otherTime) {
		fmt.Println("Текущее время и указанное время равны")
	} else {
		fmt.Println("Текущее время и указанное время не равны")
	}
}

В данном примере мы используем функцию time.Now() для получения текущего времени. Затем мы создаем другое значение времени, установленное на 1 мая 2022 года в 12:00:00. Затем мы сравниваем эти два значения времени с помощью операторов Before, After, Equal и выводим соответствующий результат.

Обратите внимание, что в Go время сравнивается по всем его компонентам, включая год, месяц и день, поэтому равенство двух значений времени может быть проверено только с использованием метода Equal(). Если вам нужно сравнить только временные компоненты (часы, минуты, секунды), вы можете использовать метод Truncate(), чтобы обнулить год, месяц и день перед сравнением.

package main

import (
	"fmt"
	"time"
)

func main() {
	currentTime := time.Now().Truncate(24 * time.Hour) // обнуляем год, месяц и день
	otherTime := time.Date(2022, time.May, 1, 12, 0, 0, 0, time.UTC).Truncate(24 * time.Hour)

	if currentTime.Before(otherTime) {
		fmt.Println("Текущее время раньше указанного времени")
	} else if currentTime.After(otherTime) {
		fmt.Println("Текущее время позже указанного времени")
	} else {
		fmt.Println("Текущее время и указанное время равны")
	}

	if currentTime.Equal(otherTime) {
		fmt.Println("Текущее время и указанное время равны")
	} else {
		fmt.Println("Текущее время и указанное время не равны")
	}
}

В этом примере мы использовали метод Truncate() для обнуления годовой, месячной и дневной части времени.