time.Time.Add în Go

Returnează momentul mutat înainte (sau înapoi, cu durată negativă) cu o durată exactă: ore, minute, secunde.

Sintaxă
func (t Time) Add(d Duration) Time

Ce face time.Time.Add

t.Add(d) adună o durată de tip time.Duration la moment și returnează un moment nou. Valoarea t nu se schimbă: time.Time este o valoare, deci trebuie să păstrezi rezultatul.

Pentru a merge înapoi în timp, dai o durată negativă: t.Add(-2 * time.Hour). Duratele se scriu ca înmulțiri cu constantele pachetului: 30 * time.Minute, 90 * time.Second, 36 * time.Hour.

Add lucrează cu timp exact (nanosecunde). Pentru zile, luni și ani din calendar, care nu au o lungime fixă, folosește AddDate.

Parametri

Parametru Descriere
d Durata de adăugat (time.Duration). Poate fi negativă.

Ce returnează

Un time.Time nou, egal cu t + d.

Exemple

Exemplul 1: Ora de sfârșit a unei întâlniri

package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2026, time.October, 19, 14, 30, 0, 0, time.UTC)
	durata := 90 * time.Minute

	sfarsit := start.Add(durata)
	fmt.Println("Început:", start.Format("15:04"))
	fmt.Println("Durată: ", durata)
	fmt.Println("Sfârșit:", sfarsit.Format("15:04"))

	reminder := start.Add(-15 * time.Minute)
	fmt.Println("Notificare la:", reminder.Format("15:04"))
}

Rezultat

Început: 14:30
Durată:  1h30m0s
Sfârșit: 16:00
Notificare la: 14:15

Exemplul 2: Programul unui tren, stație cu stație

Fiecare Add pornește de la momentul anterior; rezultatul trece și peste miezul nopții.

package main

import (
	"fmt"
	"time"
)

func main() {
	ora := time.Date(2026, time.October, 19, 22, 10, 0, 0, time.UTC)
	traseu := []struct {
		statie string
		durata time.Duration
	}{
		{"București Nord", 0},
		{"Ploiești Sud", 55 * time.Minute},
		{"Brașov", 2*time.Hour + 5*time.Minute},
		{"Sighișoara", 2*time.Hour + 20*time.Minute},
	}
	for _, s := range traseu {
		ora = ora.Add(s.durata)
		fmt.Printf("%-15s %s\n", s.statie, ora.Format("02.01 15:04"))
	}
}

Rezultat

București Nord  19.10 22:10
Ploiești Sud    19.10 23:05
Brașov          20.10 01:10
Sighișoara      20.10 03:30

Greșeli frecvente

  • Apelezi t.Add(time.Hour) fără să păstrezi rezultatul și te aștepți ca t să se schimbe. Scrie t = t.Add(time.Hour).
  • Înmulțești o durată cu o variabilă int: n * time.Minute nu compilează dacă n este int. Convertește: time.Duration(n) * time.Minute.
  • Adaugi 24 * time.Hour ca să treci la ziua următoare într-un fus cu oră de vară. În ziua schimbării orei rezultatul poate fi decalat cu o oră; folosește AddDate(0, 0, 1).

Comenzi înrudite

  • time.Time.AddDate: Adaugă ani, luni și zile din calendar la o dată (de exemplu scadența peste o lună) și normalizează rezultatul.
  • time.Time.Sub: Calculează cât timp a trecut între două momente și returnează diferența ca time.Duration.
  • time.Duration: Tipul pentru o durată, păstrată în nanosecunde; se scrie ca 90*time.Minute și se afișează ca „1h30m0s”.
  • time.Time.Before: Before, After și Equal compară două momente: este t înainte, după sau exact în același moment cu u?