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 catsă se schimbe. Scriet = t.Add(time.Hour). - Înmulțești o durată cu o variabilă
int:n * time.Minutenu compilează dacănesteint. Convertește:time.Duration(n) * time.Minute. - Adaugi
24 * time.Hourca 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șteAddDate(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?