time.Time.Format în Go

Transformă un moment în text după un model scris cu data de referință 2 ianuarie 2006, 15:04:05.

Sintaxă
func (t Time) Format(layout string) string

// data de referință: Mon Jan 2 15:04:05 MST 2006
// 2006=an 01=lună 02=zi 15=oră 04=minut 05=secundă

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) cu 04 (minutul) sau 15 (ora 0-23) cu 03 (ora 1-12). "2006-04-02" pune minutul în locul lunii.
  • Te aștepți ca Format să schimbe fusul orar. Format afișează momentul în fusul lui; pentru altă zonă apelează întâi t.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.