Parsing delle date in Go

Parsing delle date in Go

Il parsing delle date in Go può sembrare poco intuitivo all'inizio, soprattutto per chi proviene da altri linguaggi che utilizzano formati tipo YYYY-MM-DD. In Go, la funzione time.Parse utilizza un formato di riferimento specifico: Mon Jan 2 15:04:05 MST 2006. Questo layout rappresenta l’esempio da cui Go deduce il formato della stringa da interpretare.

Il Formato di Riferimento

Invece di usare simboli come yyyy, MM o dd, Go si basa su valori fissi e le loro posizioni. Ecco il valore di riferimento completo:

const layout = "Mon Jan 2 15:04:05 MST 2006"

Ogni parte rappresenta un componente specifico della data:

  • Mon: giorno della settimana (es. "Mon")
  • Jan: mese (es. "Jan")
  • 2: giorno (es. "2")
  • 15:04:05: ora nel formato 24h
  • MST: fuso orario
  • 2006: anno

Esempio di Parsing

Vediamo un esempio di come effettuare il parsing di una stringa nel formato YYYY-MM-DD:

package main

import (
	"fmt"
	"time"
)

func main() {
	layout := "2006-01-02"
	input := "2025-07-23"
	t, err := time.Parse(layout, input)
	if err != nil {
		fmt.Println("Errore nel parsing:", err)
		return
	}
	fmt.Println("Data parsata:", t)
}

Parsing con Ora

Per includere anche l’ora, si può usare un layout più esteso:

layout := "2006-01-02 15:04:05"
input := "2025-07-23 14:30:00"
t, err := time.Parse(layout, input)

Fusi Orari

Per interpretare date con fuso orario, è necessario includerlo nel layout:

layout := "2006-01-02 15:04:05 -0700"
input := "2025-07-23 14:30:00 +0200"
t, err := time.Parse(layout, input)

Parsing con time.ParseInLocation

Se si conosce il fuso orario desiderato, è possibile usare time.ParseInLocation:

loc, _ := time.LoadLocation("Europe/Rome")
t, err := time.ParseInLocation("2006-01-02 15:04:05", "2025-07-23 14:30:00", loc)

Conclusioni

Il parsing delle date in Go richiede familiarità con il layout di riferimento. Una volta compreso il principio base, è possibile analizzare correttamente quasi ogni formato. La documentazione del pacchetto time è una risorsa essenziale per ulteriori approfondimenti.