Trabajo con fechas en Go (Golang): revisión completa de bibliotecas
Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo web, análisis y backend. En Go (Golang), la biblioteca estándar time proporciona un conjunto de herramientas potente, aunque no siempre intuitivo. Para simplificar el desarrollo, existen numerosas bibliotecas de terceros. En este artículo, analizaremos en detalle los enfoques principales y las bibliotecas populares para trabajar con fechas en Go.
1. Paquete estándar time
El paquete time es la base para trabajar con fechas y horas en Go. Incluye los tipos Time, Duration, Location y funciones para formateo, análisis y aritmética.
Funcionalidades principales:
- Hora actual:
time.Now() - Formateo: método
.Format(layout string)— utiliza un formato de referencia especialMon Jan 2 15:04:05 MST 2006(Go nació en 2006). - Análisis: función
time.Parse(layout, value string). - Aritmética: métodos
.Add(d Duration),.Sub(t Time),.AddDate(y, m, d int). - Zonas horarias:
time.LoadLocation(name string)y método.In(loc *Location).
package main
import ( "fmt" "time")
func main() { // Hora actual now := time.Now() fmt.Println("Ahora:", now)
// Formateo fmt.Println("Formato RFC3339:", now.Format(time.RFC3339)) fmt.Println("Formato personalizado:", now.Format("02.01.2006 15:04:05"))
// Análisis de cadena parsed, _ := time.Parse("2006-01-02", "2024-03-15") fmt.Println("Analizado:", parsed)
// Trabajo con zonas horarias loc, _ := time.LoadLocation("Europe/Moscow") moscowTime := now.In(loc) fmt.Println("Hora en Moscú:", moscowTime)
// Aritmética tomorrow := now.AddDate(0, 0, 1) fmt.Println("Mañana:", tomorrow.Format("02.01.2006"))}Particularidad: Go utiliza un formato de referencia único (2006-01-02T15:04:05Z07:00), en lugar del habitual YYYY-MM-DD. Esto requiere acostumbrarse, pero elimina ambigüedades.
2. Biblioteca carbon (análoga a Carbon para PHP)
La biblioteca carbon es un puerto de la popular biblioteca PHP Carbon. Proporciona una interfaz fluida y conveniente para trabajar con fechas.
Instalación:
go get github.com/golang-module/carbon/v2Ejemplos de uso:
package main
import ( "fmt" "github.com/golang-module/carbon/v2")
func main() { // Fecha actual now := carbon.Now() fmt.Println("Ahora:", now.ToDateTimeString())
// Creación de fecha date := carbon.CreateFromDate(2024, 3, 15) fmt.Println("Fecha:", date.ToDateString())
// Diferencia entre fechas start := carbon.Parse("2024-01-01") end := carbon.Parse("2024-03-15") diff := start.DiffInDays(end) fmt.Printf("Días entre: %d", diff)
// Formatos legibles fmt.Println("Ayer:", carbon.Yesterday().ToDateString()) fmt.Println("Mañana:", carbon.Tomorrow().ToDateString())
// Verificaciones fmt.Println("¿Es fin de semana?", now.IsWeekend()) fmt.Println("¿Es mañana?", now.IsMorning())}Ventajas: API simple, soporte para caracteres chinos, localización, métodos para trabajar con inicio/fin de día, semana, mes.
3. Biblioteca now (herramienta minimalista)
La biblioteca now del autor de GORM es una herramienta ligera para calcular el inicio y el final de períodos de tiempo.