Ce face time.Time.Format
Go nu folosește coduri ca %Y-%m-%d. Modelul (layout) este o dată anume, Mon Jan 2 15:04:05 MST 2006, scrisă exact cum vrei să arate rezultatul. Ține minte șirul 1 2 3 4 5 6 7: luna 01, ziua 02, ora 03 (15 în format de 24 de ore), minutul 04, secunda 05, anul (20)06, fusul -07(00).
Pentru formatul românesc „19.10.2026 14:30” scrii "02.01.2006 15:04". Pentru „2026-10-19” scrii "2006-01-02". Pachetul are și constante gata făcute: time.DateTime (2006-01-02 15:04:05), time.DateOnly, time.TimeOnly, time.RFC3339 (formatul folosit în JSON și API-uri), time.Kitchen (3:04PM).
Numele lunilor și ale zilelor (Jan, January, Mon, Monday) ies întotdeauna în engleză. Pentru nume românești folosești un tablou propriu, ca în al treilea exemplu. Operația inversă, din text în time.Time, este time.Parse cu același model.
Parametri
| Parametru | Descriere |
|---|---|
layout |
Modelul: data de referință scrisă în forma dorită, de exemplu "02.01.2006", sau o constantă ca time.RFC3339. |
Ce returnează
Textul (string) cu momentul formatat.
Exemple
Exemplul 1: Formate obișnuite
Fiecare model este data de referință scrisă diferit. Cifrele care nu fac parte din data de referință (sau literele obișnuite) sunt copiate ca atare.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.October, 19, 14, 5, 9, 0, time.UTC)
fmt.Println(t.Format("02.01.2006")) // stil românesc
fmt.Println(t.Format("02.01.2006 15:04")) // cu oră, 24h
fmt.Println(t.Format("2006-01-02")) // ISO
fmt.Println(t.Format("3:04 PM")) // 12h
fmt.Println(t.Format("Monday, 2 January 2006")) // nume în engleză
fmt.Println(t.Format("ora 15, minutul 04"))
}
Rezultat
19.10.2026
19.10.2026 14:05
2026-10-19
2:05 PM
Monday, 19 October 2026
ora 14, minutul 05
Exemplul 2: Constantele predefinite
time.RFC3339 este formatul standard pentru schimb de date (JSON, API-uri). time.DateTime, time.DateOnly și time.TimeOnly există din Go 1.20.
package main
import (
"fmt"
"time"
)
func main() {
bucuresti := time.FixedZone("EEST", 3*60*60)
t := time.Date(2026, time.October, 19, 14, 30, 0, 0, bucuresti)
fmt.Println("RFC3339: ", t.Format(time.RFC3339))
fmt.Println("DateTime:", t.Format(time.DateTime))
fmt.Println("DateOnly:", t.Format(time.DateOnly))
fmt.Println("TimeOnly:", t.Format(time.TimeOnly))
fmt.Println("Kitchen: ", t.Format(time.Kitchen))
fmt.Println("RFC1123: ", t.Format(time.RFC1123))
}
Rezultat
RFC3339: 2026-10-19T14:30:00+03:00
DateTime: 2026-10-19 14:30:00
DateOnly: 2026-10-19
TimeOnly: 14:30:00
Kitchen: 2:30PM
RFC1123: Mon, 19 Oct 2026 14:30:00 EEST
Exemplul 3: Data în română și citirea înapoi cu time.Parse
Lunile și zilele au valori numerice (time.October = 10, time.Monday = 1), deci le poți folosi ca poziții într-un tablou cu nume românești. time.Parse folosește același model ca Format.
package main
import (
"fmt"
"time"
)
var luni = []string{"", "ianuarie", "februarie", "martie", "aprilie", "mai", "iunie",
"iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie"}
var zile = []string{"duminică", "luni", "marți", "miercuri", "joi", "vineri", "sâmbătă"}
func main() {
t := time.Date(2026, time.October, 19, 9, 0, 0, 0, time.UTC)
fmt.Printf("%s, %d %s %d\n", zile[t.Weekday()], t.Day(), luni[t.Month()], t.Year())
citit, err := time.Parse("02.01.2006 15:04", "25.12.2026 18:30")
if err != nil {
fmt.Println("eroare:", err)
return
}
fmt.Println("Citit:", citit)
_, err = time.Parse("02.01.2006", "31.02.2026")
fmt.Println("Dată greșită:", err)
}
Rezultat
luni, 19 octombrie 2026
Citit: 2026-12-25 18:30:00 +0000 UTC
Dată greșită: parsing time "31.02.2026": day out of range
Greșeli frecvente
- Scrii modelul cu alte numere, de exemplu
"2024-12-31"sau"YYYY-MM-DD". Rezultatul iese ciudat, pentru că doar data de referință (2006, 01, 02, 15, 04, 05) are sens în model. - Confunzi
01(luna) cu04(minutul) sau15(ora 0-23) cu03(ora 1-12)."2006-04-02"pune minutul în locul lunii. - Te aștepți ca
Formatsă schimbe fusul orar.Formatafișează momentul în fusul lui; pentru altă zonă apelează întâit.In(loc).
Comenzi înrudite
time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.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.In: Afișează același moment în alt fus orar: In(loc) pentru o zonă anume, UTC() pentru UTC, Local() pentru zona calculatorului.time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.time.Month: Tipul pentru lunile anului, de la time.January (1) la time.December (12); String() dă numele englezesc.time.Weekday: Tipul pentru zilele săptămânii, de la time.Sunday (0) la time.Saturday (6); String() dă numele englezesc.