Trabajo con fechas en Go (Golang): reseña de librerías
Trabajar con fechas y horas es una de las tareas clave en cualquier lenguaje de programación. En Go (Golang), la librería estándar proporciona un potente paquete time, pero a veces, por comodidad, los desarrolladores recurren a librerías de terceros. En este artículo, analizaremos las principales capacidades del paquete estándar y revisaremos dos librerías populares: carbon y now.
1. Paquete estándar time
El paquete time es la base para trabajar con fechas en Go. Incluye los tipos Time, Duration, funciones para análisis, formato, trabajo con temporizadores y zonas horarias.
Creación y formato de fecha
package main
import ( "fmt" "time")
func main() { // Hora actual now := time.Now() fmt.Println("Ahora:", now)
// Creación de una fecha específica date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Fecha específica:", date)
// Formato (obligatoriamente "2006-01-02 15:04:05" como referencia) fmt.Println("Formato:", date.Format("02.01.2006 15:04:05"))}Análisis de cadena a fecha
func main() { // Análisis indicando el formato str := "2025-03-15 14:30:00" parsed, err := time.Parse("2006-01-02 15:04:05", str) if err != nil { panic(err) } fmt.Println("Analizado:", parsed)}Trabajo con zonas horarias
func main() { loc, _ := time.LoadLocation("Europe/Moscow") moscowTime := time.Now().In(loc) fmt.Println("Hora de Moscú:", moscowTime)}Diferencia entre fechas
func main() { start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC) end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC) duration := end.Sub(start) fmt.Printf("Diferencia: %v (horas: %v)", duration, duration.Hours())}2. Librería carbon
La librería carbon (github.com/golang-module/carbon) es un puerto de la popular librería PHP Carbon para Go. Proporciona una interfaz fluida 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.ToString())
// Creación de fecha date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("Analizado:", date.ToDateString())
// Adición de días future := carbon.Now().AddDays(10) fmt.Println("En 10 días:", future.ToDateString())
// Diferencia en días diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("Hasta Año Nuevo: %d días", diff)
// Formato fmt.Println("Formato personalizado:", carbon.Now().Format("d/m/Y H:i:s"))}Métodos útiles
StartOfDay()/EndOfDay()— inicio/fin del díaIsWeekend()/IsWeekday()— verificación del día de la semanaAge()— edad desde la fecha de nacimientoDiffForHumans()— diferencia legible para humanos (ej., "hace 3 días")
3. Librería now
La librería now (github.com/jinzhu/now) del creador de GORM es una utilidad ligera para obtener el inicio y el final de períodos de tiempo.
Instalación
go get github.com/jinzhu/nowEjemplos de uso
package main
import ( "fmt" "time" "github.com/jinzhu/now")
func main() { // Inicio del día beginningOfDay := now.BeginningOfDay() fmt.Println(" También en la biblioteca
Dokka para Kotlin: guía completa con ejemplos prácticos
Monitoreo de aplicaciones Kotlin: biblioteca Ktor Metrics y Micrometer
Aprendizaje automático en PHP: revisión de bibliotecas para ML
Cliente Redis (go-redis) para Go: guía completa con ejemplos
Internacionalización (i18n) en Rust: mejores bibliotecas y prácticas