Ce face time.Time.Truncate
t.Truncate(time.Hour) taie minutele și secundele: 14:47 devine 14:00. t.Round(15 * time.Minute) duce momentul la cel mai apropiat sfert de oră: 14:47 devine 14:45, iar 14:53 devine 15:00. La egalitate, Round rotunjește în sus.
Calculul se face pe timpul absolut (de la anul 1, în UTC), nu pe ora afișată. Pentru ore, minute și secunde nu contează, dar Truncate(24 * time.Hour) dă miezul nopții în UTC, nu miezul nopții la București. Pentru începutul zilei locale folosește time.Date(an, luna, zi, 0, 0, 0, 0, loc).
Parametri
| Parametru | Descriere |
|---|---|
d |
Durata la care rotunjești: time.Hour, 15 * time.Minute, time.Second. Dacă d <= 0, momentul rămâne neschimbat. |
Ce returnează
Un time.Time nou, rotunjit.
Exemple
Exemplul 1: Rotunjiri la oră și la sfert de oră
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 10, 19, 14, 47, 31, 0, time.UTC)
fmt.Println("Original: ", t.Format("15:04:05"))
fmt.Println("Truncate(Hour): ", t.Truncate(time.Hour).Format("15:04:05"))
fmt.Println("Truncate(15*Minute): ", t.Truncate(15*time.Minute).Format("15:04:05"))
fmt.Println("Round(15*Minute): ", t.Round(15*time.Minute).Format("15:04:05"))
fmt.Println("Round(Hour): ", t.Round(time.Hour).Format("15:04:05"))
fmt.Println("Round(Minute): ", t.Round(time.Minute).Format("15:04:05"))
}
Rezultat
Original: 14:47:31
Truncate(Hour): 14:00:00
Truncate(15*Minute): 14:45:00
Round(15*Minute): 14:45:00
Round(Hour): 15:00:00
Round(Minute): 14:48:00
Exemplul 2: Gruparea comenzilor pe ore
Truncate(time.Hour) dă aceeași cheie pentru toate comenzile din aceeași oră.
package main
import (
"fmt"
"time"
)
func main() {
ora := func(h, m int) time.Time { return time.Date(2026, 10, 19, h, m, 0, 0, time.UTC) }
comenzi := []time.Time{ora(9, 5), ora(9, 40), ora(10, 2), ora(10, 15), ora(10, 59), ora(12, 30)}
numar := map[string]int{}
for _, c := range comenzi {
numar[c.Truncate(time.Hour).Format("15:04")]++
}
fmt.Println(numar)
}
Rezultat
map[09:00:2 10:00:3 12:00:1]
Greșeli frecvente
- Folosești
Truncate(24 * time.Hour)pentru „începutul zilei” într-un fus diferit de UTC; rezultatul este miezul nopții UTC (ex. 03:00 la București). Construiește data cutime.Date.
Comenzi înrudite
time.Duration.Round: Rotunjește o durată la un multiplu: Round la cel mai apropiat, Truncate în jos (ex. la secundă pentru afișare).time.Time.Clock: Citește ora dintr-un moment: Clock dă ora, minutul și secunda deodată; Hour, Minute, Second le dau pe rând.time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.