Ce face time.Time
time.Time reprezintă un moment precis: anul, luna, ziua, ora, minutul, secunda, nanosecunda și fusul orar (*time.Location). Este o valoare obișnuită (nu un pointer): o poți copia, o poți transmite funcțiilor și o poți pune în structuri fără grijă.
Un moment fix se creează cu time.Date(2026, time.October, 19, 14, 30, 0, 0, time.UTC), iar momentul curent cu time.Now(). Dacă dai valori în afara intervalului (de exemplu 32 octombrie), time.Date le normalizează: 32 octombrie devine 1 noiembrie.
Valoarea zero a tipului (var t time.Time) este 1 ianuarie anul 1, ora 00:00:00 UTC. t.IsZero() spune dacă un câmp de tip time.Time a rămas necompletat, de exemplu data ultimei autentificări a unui utilizator nou.
Parametri
| Parametru | Descriere |
|---|---|
an, luna, zi |
Data. Luna are tipul time.Month: time.October sau time.Month(10). |
ora, min, sec, nsec |
Ora, minutul, secunda și nanosecundele. |
loc |
Fusul orar: time.UTC, time.Local sau unul încărcat cu time.LoadLocation. Nu poate fi nil. |
Ce returnează
time.Date și time.Now returnează un time.Time. IsZero returnează true dacă momentul este valoarea zero.
Exemple
Exemplul 1: Un moment fix creat cu time.Date
fmt.Println afișează momentul în formatul implicit, cu fusul orar la final. Câmpurile se citesc cu metode (Year, Month, Day…).
package main
import (
"fmt"
"time"
)
func main() {
examen := time.Date(2026, time.October, 19, 14, 30, 0, 0, time.UTC)
fmt.Println("Examenul:", examen)
fmt.Println("Anul:", examen.Year(), "luna:", examen.Month(), "ziua:", examen.Day())
// Valorile prea mari sunt normalizate: 32 octombrie = 1 noiembrie
t := time.Date(2026, time.October, 32, 0, 0, 0, 0, time.UTC)
fmt.Println("32 octombrie devine:", t.Format("2006-01-02"))
}
Rezultat
Examenul: 2026-10-19 14:30:00 +0000 UTC
Anul: 2026 luna: October ziua: 19
32 octombrie devine: 2026-11-01
Exemplul 2: Câmp necompletat: IsZero
Un câmp time.Time dintr-o structură pornește cu valoarea zero. IsZero este modul corect de a verifica dacă a fost setat.
package main
import (
"fmt"
"time"
)
type Utilizator struct {
Nume string
UltimaLogare time.Time
}
func main() {
utilizatori := []Utilizator{
{Nume: "Ana", UltimaLogare: time.Date(2026, 10, 18, 9, 15, 0, 0, time.UTC)},
{Nume: "Mihai"}, // nu s-a logat niciodată
}
for _, u := range utilizatori {
if u.UltimaLogare.IsZero() {
fmt.Printf("%s: nu s-a logat încă\n", u.Nume)
} else {
fmt.Printf("%s: ultima logare %s\n", u.Nume, u.UltimaLogare.Format("02.01.2006 15:04"))
}
}
var zero time.Time
fmt.Println("Valoarea zero:", zero)
}
Rezultat
Ana: ultima logare 18.10.2026 09:15
Mihai: nu s-a logat încă
Valoarea zero: 0001-01-01 00:00:00 +0000 UTC
Exemplul 3: Momentul curent cu time.Now
time.Now() dă ora calculatorului, deci rezultatul diferă la fiecare rulare.
package main
import (
"fmt"
"time"
)
func main() {
acum := time.Now()
fmt.Println("Acum:", acum.Format("02.01.2006 15:04:05"))
fmt.Println("Anul curent:", acum.Year())
}
Rezultat posibil (diferă la fiecare rulare)
Acum: 19.10.2026 11:42:07
Anul curent: 2026
Greșeli frecvente
- Compari momente cu
==. Două valoritime.Timepentru același moment pot avea fusuri orare diferite și==spune că sunt diferite. Foloseștet.Equal(u). - Verifici o dată necompletată cu
t == time.Time{}. Funcționează de obicei, dart.IsZero()este mai clar și merge și după conversii de fus orar. - Dai
nilca fus orar luitime.Date: programul se oprește cu panică. Foloseștetime.UTCsautime.Local.
Comenzi înrudite
time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.time.Now: Returnează momentul curent, în fusul orar local, cu o citire a ceasului monoton pentru măsurarea duratelor.time.Time.Format: Transformă un moment în text după un model scris cu data de referință 2 ianuarie 2006, 15:04:05.time.Parse: Citește o dată din text după un model (2006-01-02 15:04); ParseInLocation o interpretează într-un fus orar dat.time.Time.Add: Returnează momentul mutat înainte (sau înapoi, cu durată negativă) cu o durată exactă: ore, minute, secunde.time.Time.Sub: Calculează cât timp a trecut între două momente și returnează diferența ca time.Duration.time.Time.Before: Before, After și Equal compară două momente: este t înainte, după sau exact în același moment cu u?time.Time.In: Afișează același moment în alt fus orar: In(loc) pentru o zonă anume, UTC() pentru UTC, Local() pentru zona calculatorului.time.Duration: Tipul pentru o durată, păstrată în nanosecunde; se scrie ca 90*time.Minute și se afișează ca „1h30m0s”.