Introducción al trabajo con fechas y horas en Go
Trabajar con fechas y horas es una de las tareas clave en cualquier lenguaje de programación. El lenguaje Go (Golang) proporciona un paquete time potente e intuitivo que permite realizar todas las operaciones básicas: obtener la hora actual, analizar cadenas, formatear, calcular diferencias, crear temporizadores y mucho más. A diferencia de otros lenguajes, Go utiliza un formato de fecha de referencia único, lo que hace que el código sea más legible y predecible. En este artículo, analizaremos en detalle las principales capacidades del paquete time con ejemplos prácticos.
Tipos principales y obtención de la hora actual
Tipo time.Time
El tipo central en el paquete time es la estructura time.Time. Almacena información sobre segundos, nanosegundos, zona horaria y un contador monotónico (para mediciones precisas).
Obtener el momento actual
Para obtener la hora actual se utiliza la función time.Now(). Devuelve la hora local basada en la configuración del sistema.
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Hora actual:", now) fmt.Println("Año:", now.Year()) fmt.Println("Mes:", now.Month()) fmt.Println("Día:", now.Day()) fmt.Println("Horas:", now.Hour()) fmt.Println("Minutos:", now.Minute()) fmt.Println("Segundos:", now.Second()) fmt.Println("Nanosegundos:", now.Nanosecond()) fmt.Println("Día de la semana:", now.Weekday())}Crear una hora manualmente
Puede crear un momento específico con la función time.Date(). Acepta año, mes, día, hora, minuto, segundo, nanosegundo y zona horaria.
package main
import ( "fmt" "time")
func main() { // 15 de marzo de 2025, 14:30:00, UTC specificDate := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Fecha creada:", specificDate)}Análisis y formateo de fechas
Formato de referencia de Go
Go utiliza un enfoque único para el formateo: en lugar de códigos como YYYY-MM-DD, se utiliza la fecha de referencia Mon Jan 2 15:04:05 MST 2006 (o abreviado 2006-01-02T15:04:05Z07:00). Esto significa que para indicar el año escribe 2006, para el mes — 01, para el día — 02, para la hora — 15 (o 03 para formato de 12 horas), para el minuto — 04, para el segundo — 05.
Formatear hora a cadena
El método Format() convierte time.Time en una cadena según la plantilla dada.
package main
import ( "fmt" "time")
func main() { now := time.Now() fmt.Println("Formato estándar:", now.Format("2006-01-02 15:04:05")) fmt.Println("Formato español:", now.Format("02.01.2006 15:04")) fmt.Println("Solo fecha:", now.Format("02 Jan 2006")) fmt.Println("Formato 12 horas:", now.Format("03:04:05 PM"))}Analizar una cadena en fecha
La función time.Parse() convierte una cadena en time.Time. Es importante que la cadena coincida con la plantilla.
package main
import ( "fmt" "time")
func main() { dateStr := "2025-03-15 14:30:00" layout := "2006-01-02 15:04:05" parsedTime, err := time.Parse(layout, dateStr) if err != nil { fmt.Println("Error de análisis:", err) return } fmt.Println("Hora analizada:", parsedTime) fmt.Println("Día de la semana:", parsedTime.Weekday())}Análisis con zona horaria
Para cadenas con zona horaria, use time.ParseInLocation() o indique el desplazamiento en la plantilla (Z07:00).
package main
import ( "fmt" "tim