Ce face time.Parse
time.Parse(model, text) face operația inversă lui Format: transformă un text ca "19.10.2026 14:30" într-un time.Time. Modelul se scrie cu aceeași dată de referință, Mon Jan 2 15:04:05 MST 2006: "02.01.2006 15:04", "2006-01-02", sau constante ca time.RFC3339 și time.DateOnly. Spre deosebire de time.Date, Parse verifică datele: 31.02.2026 dă eroare.
Dacă textul nu conține fusul orar, Parse consideră ora în UTC. Pentru texte scrise în ora locală a utilizatorului (de exemplu dintr-un formular românesc) folosește time.ParseInLocation(model, text, loc), care interpretează ora în zona loc. Dacă textul conține fusul (+03:00, Z), acesta este respectat de ambele.
Erorile sunt de tip *time.ParseError și spun ce parte nu se potrivește (month out of range, cannot parse ... as "2006").
Parametri
| Parametru | Descriere |
|---|---|
layout |
Modelul textului, scris cu data de referință. |
value |
Textul de citit. |
loc |
Fusul orar în care se interpretează ora (doar la ParseInLocation). |
Ce returnează
Momentul citit și o eroare.
Exemple
Exemplul 1: Date în formate diferite
package main
import (
"fmt"
"time"
)
func main() {
intrari := []struct{ model, text string }{
{"02.01.2006", "19.10.2026"},
{"02.01.2006 15:04", "25.12.2026 18:30"},
{time.DateOnly, "2026-03-08"},
{time.RFC3339, "2026-10-19T14:30:00+03:00"},
{"2 January 2006", "1 December 2026"},
}
for _, in := range intrari {
t, err := time.Parse(in.model, in.text)
if err != nil {
fmt.Println("eroare:", err)
continue
}
fmt.Printf("%-26s -> %s\n", in.text, t)
}
}
Rezultat
19.10.2026 -> 2026-10-19 00:00:00 +0000 UTC
25.12.2026 18:30 -> 2026-12-25 18:30:00 +0000 UTC
2026-03-08 -> 2026-03-08 00:00:00 +0000 UTC
2026-10-19T14:30:00+03:00 -> 2026-10-19 14:30:00 +0300 EEST
1 December 2026 -> 2026-12-01 00:00:00 +0000 UTC
Exemplul 2: Validarea datei introduse de utilizator
package main
import (
"fmt"
"time"
)
func main() {
for _, text := range []string{"29.02.2028", "29.02.2027", "31.04.2026", "2026-10-19", "19.13.2026"} {
t, err := time.Parse("02.01.2006", text)
if err != nil {
fmt.Printf("%-11s invalid: %v\n", text, err)
continue
}
fmt.Printf("%-11s ok, %s\n", text, t.Weekday())
}
}
Rezultat
29.02.2028 ok, Tuesday
29.02.2027 invalid: parsing time "29.02.2027": day out of range
31.04.2026 invalid: parsing time "31.04.2026": day out of range
2026-10-19 invalid: parsing time "2026-10-19" as "02.01.2006": cannot parse "26-10-19" as "."
19.13.2026 invalid: parsing time "19.13.2026": month out of range
Exemplul 3: Ora românească: Parse față de ParseInLocation
Un formular trimite „19.10.2026 14:30”, ora României. Parse o ia drept UTC (greșit cu 3 ore); ParseInLocation o interpretează corect.
package main
import (
"fmt"
"time"
)
func main() {
buc, err := time.LoadLocation("Europe/Bucharest")
if err != nil {
fmt.Println(err)
return
}
const model = "02.01.2006 15:04"
a, _ := time.Parse(model, "19.10.2026 14:30")
b, _ := time.ParseInLocation(model, "19.10.2026 14:30", buc)
fmt.Println("Parse: ", a, "| în UTC:", a.UTC().Format("15:04"))
fmt.Println("ParseInLocation:", b, "| în UTC:", b.UTC().Format("15:04"))
fmt.Println("Diferență:", a.Sub(b))
}
Rezultat
Parse: 2026-10-19 14:30:00 +0000 UTC | în UTC: 14:30
ParseInLocation: 2026-10-19 14:30:00 +0300 EEST | în UTC: 11:30
Diferență: 3h0m0s
Greșeli frecvente
- Inversezi argumentele:
time.Parse("19.10.2026", "02.01.2006"). Primul este modelul, al doilea textul. - Scrii modelul cu altă dată (
"19.10.2026"sau"DD.MM.YYYY"): doar data de referință 2006-01-02 15:04:05 funcționează ca model. - Folosești
Parsepentru ore locale fără fus în text și salvezi rezultatul: toate orele sunt decalate cu 2-3 ore. FoloseșteParseInLocation.
Comenzi înrudite
time.Time.Format: Transformă un moment în text după un model scris cu data de referință 2 ianuarie 2006, 15:04:05.time.LoadLocation: Obține un fus orar: LoadLocation după nume („Europe/Bucharest”), din date brute (FromTZData) sau cu decalaj fix (FixedZone).time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.time.ParseDuration: Citește o durată scrisă ca text („1h30m”, „250ms”, „2.5s”) într-un time.Duration; util pentru setări.