time.Time.Compare în Go

Compară două momente și returnează -1, 0 sau +1; potrivită pentru sortarea cu slices.SortFunc.

Sintaxă
func (t Time) Compare(u Time) int

Ce face time.Time.Compare

t.Compare(u) returnează -1 dacă t este înainte de u, 0 dacă sunt același moment și +1 dacă t este după. Este forma de care au nevoie funcțiile de sortare din pachetele slices și sort.

Ca și Equal, compară momentul real, indiferent de fusul orar în care este scris.

Parametri

Parametru Descriere
u Momentul cu care compari.

Ce returnează

-1, 0 sau +1.

Exemple

Exemplul 1: Sortarea programărilor

package main

import (
	"fmt"
	"slices"
	"time"
)

type Programare struct {
	Pacient string
	Ora     time.Time
}

func main() {
	zi := func(h, m int) time.Time { return time.Date(2026, 10, 19, h, m, 0, 0, time.UTC) }
	lista := []Programare{
		{"Maria", zi(11, 30)},
		{"Andrei", zi(9, 0)},
		{"Ioana", zi(10, 15)},
	}
	slices.SortFunc(lista, func(a, b Programare) int {
		return a.Ora.Compare(b.Ora)
	})
	for _, p := range lista {
		fmt.Println(p.Ora.Format("15:04"), p.Pacient)
	}
}

Rezultat

09:00 Andrei
10:15 Ioana
11:30 Maria

Exemplul 2: Valorile returnate

package main

import (
	"fmt"
	"time"
)

func main() {
	a := time.Date(2026, 10, 19, 12, 0, 0, 0, time.UTC)
	b := a.Add(time.Hour)
	fmt.Println(a.Compare(b), b.Compare(a), a.Compare(a))
}

Rezultat

-1 1 0

Greșeli frecvente

  • Scrii o funcție de comparare cu Before care returnează doar -1 sau 1 și uiți cazul egal; Compare tratează toate trei cazurile.

Comenzi înrudite

  • time.Time.Before: Before, After și Equal compară două momente: este t înainte, după sau exact în același moment cu u?
  • time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.