time.Duration.Hours în Go

Transformă o durată în număr de ore, minute sau secunde (float64) ori milisecunde (int64).

Sintaxă
func (d Duration) Hours() float64
func (d Duration) Minutes() float64
func (d Duration) Seconds() float64
func (d Duration) Milliseconds() int64   // Go 1.13

Ce face time.Duration.Hours

Hours(), Minutes() și Seconds() returnează durata ca număr zecimal (float64): 90 de minute dau 1.5 ore. Milliseconds() returnează un întreg (int64), cu partea fracționară tăiată. Există și Microseconds() și Nanoseconds().

Pentru „câte ore întregi și câte minute rămân” folosești împărțirea duratelor: d / time.Hour și d % time.Hour, ca în al doilea exemplu.

Ce returnează

float64 pentru Hours, Minutes, Seconds; int64 pentru Milliseconds.

Exemple

Exemplul 1: Ore lucrate și plată

package main

import (
	"fmt"
	"time"
)

func main() {
	lucrat := 7*time.Hour + 45*time.Minute
	tarif := 52.0 // lei pe oră

	fmt.Println("Ore:     ", lucrat.Hours())
	fmt.Println("Minute:  ", lucrat.Minutes())
	fmt.Println("Secunde: ", lucrat.Seconds())
	fmt.Println("Milisec: ", lucrat.Milliseconds())
	fmt.Printf("De plată: %.2f lei\n", lucrat.Hours()*tarif)

	scurt := 1750 * time.Microsecond
	fmt.Println(scurt, "=", scurt.Milliseconds(), "ms întregi,", scurt.Seconds(), "s")
}

Rezultat

Ore:      7.75
Minute:   465
Secunde:  27900
Milisec:  27900000
De plată: 403.00 lei
1.75ms = 1 ms întregi, 0.00175 s

Exemplul 2: Afișare ore și minute

package main

import (
	"fmt"
	"time"
)

func oreMinute(d time.Duration) string {
	ore := d / time.Hour
	minute := (d % time.Hour) / time.Minute
	return fmt.Sprintf("%d h %02d min", ore, minute)
}

func main() {
	start := time.Date(2026, 10, 19, 6, 50, 0, 0, time.UTC)
	sosire := time.Date(2026, 10, 19, 13, 25, 0, 0, time.UTC)
	fmt.Println("Călătoria Iași - București:", oreMinute(sosire.Sub(start)))
	fmt.Println(oreMinute(135 * time.Minute))
}

Rezultat

Călătoria Iași - București: 6 h 35 min
2 h 15 min

Greșeli frecvente

  • Convertești cu int(d.Hours()) și pierzi minutele. Pentru ore și minute separate folosește d / time.Hour și d % time.Hour.
  • Folosești int64(d) ca număr de milisecunde. int64(d) este în nanosecunde; folosește d.Milliseconds().

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.Round: Rotunjește o durată la un multiplu: Round la cel mai apropiat, Truncate în jos (ex. la secundă pentru afișare).
  • time.Time.Sub: Calculează cât timp a trecut între două momente și returnează diferența ca time.Duration.