time.Duration.Round în Go

Rotunjește o durată la un multiplu: Round la cel mai apropiat, Truncate în jos (ex. la secundă pentru afișare).

Sintaxă
func (d Duration) Round(m Duration) Duration
func (d Duration) Truncate(m Duration) Duration

Ce face time.Duration.Round

Duratele măsurate au multe zecimale (1.234567891s). d.Round(time.Millisecond) le rotunjește la cea mai apropiată milisecundă, iar d.Truncate(time.Second) taie tot ce este sub o secundă. La jumătate, Round rotunjește departe de zero.

Dacă m <= 0, ambele returnează durata neschimbată.

Parametri

Parametru Descriere
m Multiplul: time.Second, time.Millisecond, time.Minute etc.

Ce returnează

Durata rotunjită (time.Duration).

Exemple

Exemplul 1: Aceeași durată, rotunjită diferit

package main

import (
	"fmt"
	"time"
)

func main() {
	d, _ := time.ParseDuration("1h15m30.918273645s")
	pasi := []time.Duration{time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute, time.Hour}
	for _, m := range pasi {
		fmt.Printf("m = %-6v  Round: %-20v Truncate: %v\n", m, d.Round(m), d.Truncate(m))
	}
}

Rezultat

m = 1ns     Round: 1h15m30.918273645s   Truncate: 1h15m30.918273645s
m = 1µs     Round: 1h15m30.918274s      Truncate: 1h15m30.918273s
m = 1ms     Round: 1h15m30.918s         Truncate: 1h15m30.918s
m = 1s      Round: 1h15m31s             Truncate: 1h15m30s
m = 1m0s    Round: 1h16m0s              Truncate: 1h15m0s
m = 1h0m0s  Round: 1h0m0s               Truncate: 1h0m0s

Exemplul 2: Timpi de concurs

package main

import (
	"fmt"
	"time"
)

func main() {
	timpi := map[string]time.Duration{
		"Ana":   41*time.Minute + 12*time.Second + 487*time.Millisecond,
		"Vlad":  39*time.Minute + 58*time.Second + 502*time.Millisecond,
		"Sorin": 44*time.Minute + 3*time.Second + 99*time.Millisecond,
	}
	for _, nume := range []string{"Ana", "Vlad", "Sorin"} {
		t := timpi[nume]
		fmt.Printf("%-6s %-12v -> %-7v (Truncate: %v)\n", nume, t, t.Round(time.Second), t.Truncate(time.Second))
	}
}

Rezultat

Ana    41m12.487s   -> 41m12s  (Truncate: 41m12s)
Vlad   39m58.502s   -> 39m59s  (Truncate: 39m58s)
Sorin  44m3.099s    -> 44m3s   (Truncate: 44m3s)

Greșeli frecvente

  • Formatezi durata cu %.2f: time.Duration este întreg. Rotunjește cu Round și afișează cu %v, sau folosește d.Seconds() cu %.2f.

Comenzi înrudite

  • time.Duration: Tipul pentru o durată, păstrată în nanosecunde; se scrie ca 90*time.Minute și se afișează ca „1h30m0s”.
  • time.Duration.Hours: Transformă o durată în număr de ore, minute sau secunde (float64) ori milisecunde (int64).
  • time.Time.Truncate: Rotunjește un moment la un multiplu de durată: Truncate în jos, Round la cel mai apropiat (ex. la ora sau sfertul de oră).